A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lvguodong 中级黑马   /  2015-10-5 14:52  /  463 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     struct lv
  5.     {
  6.         char *name;
  7.         int age;
  8.     };
  9.     struct lv l1={"栋1",11};
  10.     struct lv *p1=&l1;        //定义结构体指针,也可以写成struct lv *p1=&l1.name;会出现警告但不会影响程序正常运行,仅从值的角度来说,结构体的地址=结构体首个元素的地址
  11. /*   struct lv *p1=l1;              这种定义是错误的,原因是结构体名不包含首个元素的地址 */
  12.     //下面两个是等价的
  13.     printf("p1=%p\t(*p1).name=%s\t(*p1).age=%d\n",p1,(*p1).name,(*p1).age);
  14.     printf("p1=%p\tp1->name=%s\tp1->age=%d\n",p1,p1->name,p1->age);
  15.     //改变结构体指针地址的值;15,16行和18,19行是等价的,这是结构体独有的
  16.     (*p1).name="国2";
  17.     (*p1).age=12;
  18.     printf("p1=%p\t(*p1).name=%s\t(*p1).age=%d\n",p1,(*p1).name,(*p1).age);
  19.     p1->name="吕3";
  20.     p1->age=13;
  21.     printf("p1=%p\tp1->name=%s\tp1->age=%d\n",p1,p1->name,p1->age);
  22.     //char **p2=l1;这种定义是错误的,原因是结构体名不包含首个元素的地址
  23.     char **p2=&l1.name;
  24.     int  *p3=&l1.age;
  25.     printf("*p2=%s\t*p3=%d\n",*p2,*p3);
  26.     printf("*p2的地址为:%p\tp2的地址为:%p\tp3的地址为:%p\n",*p2,p2,p3);
  27.     //以下定义会出现警告但不会影响程序正常运行,仅从值的角度来说,结构体的地址=结构体首个元素的地址
  28.     char **p4=&l1;
  29.     printf("*p4=%s\n",*p4);
  30.     printf("*p4的地址为:%p\tp4的地址为:%p\n",*p4,p4);
  31.     return 0;
  32. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马