黑马程序员技术交流社区

标题: 结构体 [打印本页]

作者: sl7s78s8    时间: 2014-7-21 21:03
标题: 结构体
本帖最后由 sl7s78s8 于 2014-7-22 20:59 编辑

struct  Date
{   int year;
    int  mouth;
    int day;
};
struct Date day = {2014,7,21};
printf("%p\n",day);
printf("%p\n",&day);
第一个day输出的是一个值,看不懂,day这个变量代表了什么?





作者: YKS    时间: 2014-7-21 22:03
代表了结构体中变量day对应的值
作者: Melody_cw    时间: 2014-7-21 22:46
楼主你好
作者: 诸葛佰通    时间: 2014-7-21 22:53
%p输出的是变量的地址。day这个变量代表的是一个date结构体。
作者: 且行且惜    时间: 2014-7-21 23:07
恩,是地址的!地址是十六进制,应该很容易看的出来!!!
作者: 道本真    时间: 2014-7-21 23:13
printf("%p\n",&day)这个输出的时结构体变量的地址,与结构体里面的头个变量&day.year的地址一样,而
printf("%p\n",day),没有这样的表达,是错误的,只是由于c的弱语法性,才编程通过。我是这样理解的,希望对楼主你与帮助
作者: Melody_cw    时间: 2014-7-21 23:14
楼主你好,按着你的程序我又在里面加了几个输出

  1. #include <stdio.h>
  2. int main()
  3. {       
  4.         struct  Date
  5. {   int year;
  6.     int  mouth;
  7.     int day;
  8. };
  9. struct Date day = {2014,7,21};
  10. printf("%p\n",day);/*他输出的是一个没规则的数据,这不符合规则,%p是输出地址的,你后面没有加地址,day是你定义个变量*/
  11. printf("%p\n",&day);//这里输出的是你定义的变量day在内存中的地址
  12. printf("%p\n",&day.day);//这个输出的是你结构体中的day的地址
  13. printf("%p\n",&day.mouth);//这个输出的是你结构体中mouth的地址
  14. printf("%p\n",&day.year);//这个你输出的是你结构体中year的地址,它和你定义的变量day是同一个地址
  15.         return 0;
  16. }
复制代码


这里可能说的比较抽象,我给你改下


  1. #include <stdio.h>
  2. int main()
  3. {       
  4.         struct  Date
  5. {   int year;
  6.     int  mouth;
  7.     int day;
  8. };
  9. struct Date n = {2014,7,21};
  10. printf("%p\n",n);/*他输出的是一个没规则的数据,这不符合规则,%p是输出地址的,你后面没有加地址,n                    是你定义个变量*/
  11. printf("%p\n",&n);//这里输出的是你定义的变量n在内存中的地址
  12. printf("%p\n",&n.day);//这个输出的是你结构体中的day的地址
  13. printf("%p\n",&n.mouth);//这个输出的是你结构体中mouth的地址
  14. printf("%p\n",&n.year);//这个你输出的是你结构体中year的地址,它和你定义的变量n是同一个地址
  15.         return 0;
  16. }
复制代码


两个对比着看你会明白了一些,你的printf("%p\n",day);输出的值和下面我给你举得这个例子类似你看下
  1. #include<stdio.h>
  2. int main()
  3. {       
  4.         int a = 10;

  5.         printf("%p",a);

  6.         return 0;
  7. }
复制代码


这里的printf("%p",a);输出的也是一段无规则的数据,那个day就相当于这里的a

我也是个初学者,可能说的含糊,你有不明白的咱俩在一起讨论
作者: Melody_cw    时间: 2014-7-21 23:35
道本真 发表于 2014-7-21 23:13
printf("%p\n",&day)这个输出的时结构体变量的地址,与结构体里面的头个变量&day.year的地址一样,而
prin ...

嗯 是这个意思的
作者: sl7s78s8    时间: 2014-7-22 20:55
道本真 发表于 2014-7-21 23:13
printf("%p\n",&day)这个输出的时结构体变量的地址,与结构体里面的头个变量&day.year的地址一样,而
prin ...

编译的时候貌似是有警告在
作者: sl7s78s8    时间: 2014-7-22 20:58
Melody_cw 发表于 2014-7-21 23:14
楼主你好,按着你的程序我又在里面加了几个输出

够详细,谢了

作者: 愿望    时间: 2014-7-22 21:20
第一个day是变量,后面的带有@了, 它就变成了变量地址,
作者: Melody_cw    时间: 2014-7-22 21:36
sl7s78s8 发表于 2014-7-22 20:58
够详细,谢了

不客气,互相学习,只要你能明白就可以了,不明白继续问我,以后多交流




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2