黑马程序员技术交流社区
标题:
结构体指针
[打印本页]
作者:
lvguodong
时间:
2015-10-5 14:52
标题:
结构体指针
#include <stdio.h>
int main()
{
struct lv
{
char *name;
int age;
};
struct lv l1={"栋1",11};
struct lv *p1=&l1; //定义结构体指针,也可以写成struct lv *p1=&l1.name;会出现警告但不会影响程序正常运行,仅从值的角度来说,结构体的地址=结构体首个元素的地址
/* struct lv *p1=l1; 这种定义是错误的,原因是结构体名不包含首个元素的地址 */
//下面两个是等价的
printf("p1=%p\t(*p1).name=%s\t(*p1).age=%d\n",p1,(*p1).name,(*p1).age);
printf("p1=%p\tp1->name=%s\tp1->age=%d\n",p1,p1->name,p1->age);
//改变结构体指针地址的值;15,16行和18,19行是等价的,这是结构体独有的
(*p1).name="国2";
(*p1).age=12;
printf("p1=%p\t(*p1).name=%s\t(*p1).age=%d\n",p1,(*p1).name,(*p1).age);
p1->name="吕3";
p1->age=13;
printf("p1=%p\tp1->name=%s\tp1->age=%d\n",p1,p1->name,p1->age);
//char **p2=l1;这种定义是错误的,原因是结构体名不包含首个元素的地址
char **p2=&l1.name;
int *p3=&l1.age;
printf("*p2=%s\t*p3=%d\n",*p2,*p3);
printf("*p2的地址为:%p\tp2的地址为:%p\tp3的地址为:%p\n",*p2,p2,p3);
//以下定义会出现警告但不会影响程序正常运行,仅从值的角度来说,结构体的地址=结构体首个元素的地址
char **p4=&l1;
printf("*p4=%s\n",*p4);
printf("*p4的地址为:%p\tp4的地址为:%p\n",*p4,p4);
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2