- #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;
- }
复制代码
|
|