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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sl7s78s8 中级黑马   /  2014-7-21 21:03  /  2290 人查看  /  11 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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这个变量代表了什么?




评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

11 个回复

倒序浏览
代表了结构体中变量day对应的值
回复 使用道具 举报
楼主你好
回复 使用道具 举报
%p输出的是变量的地址。day这个变量代表的是一个date结构体。
回复 使用道具 举报
恩,是地址的!地址是十六进制,应该很容易看的出来!!!
回复 使用道具 举报
printf("%p\n",&day)这个输出的时结构体变量的地址,与结构体里面的头个变量&day.year的地址一样,而
printf("%p\n",day),没有这样的表达,是错误的,只是由于c的弱语法性,才编程通过。我是这样理解的,希望对楼主你与帮助

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报 1 0
楼主你好,按着你的程序我又在里面加了几个输出

  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

我也是个初学者,可能说的含糊,你有不明白的咱俩在一起讨论

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
道本真 发表于 2014-7-21 23:13
printf("%p\n",&day)这个输出的时结构体变量的地址,与结构体里面的头个变量&day.year的地址一样,而
prin ...

嗯 是这个意思的
回复 使用道具 举报
道本真 发表于 2014-7-21 23:13
printf("%p\n",&day)这个输出的时结构体变量的地址,与结构体里面的头个变量&day.year的地址一样,而
prin ...

编译的时候貌似是有警告在
回复 使用道具 举报
Melody_cw 发表于 2014-7-21 23:14
楼主你好,按着你的程序我又在里面加了几个输出

够详细,谢了
回复 使用道具 举报
第一个day是变量,后面的带有@了, 它就变成了变量地址,
回复 使用道具 举报

不客气,互相学习,只要你能明白就可以了,不明白继续问我,以后多交流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马