免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 8444 | 回复: 31
打印 上一主题 下一主题

访问struct成员的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-21 09:12 |只看该作者 |倒序浏览
#include <stdio.h>

typedef struct {
                int a;
                int b;
                int d;
                int e;
}C;

int main(){
                C c={10,8,2,4};
                C *p=&c;
                printf("%d,%d,%d,%d\n",*p,&p,&p+1,&p+2);谁可以从原理上解释一下这一句
           printf("%d,%d,%d,%d\n",*p);
                printf("%d,%d,%d,%d\n",p,&p,&p+1,&p+2);
                return 0;
}

其结果:10,8,2,4

[ 本帖最后由 xxldc 于 2007-9-21 09:53 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-09-21 09:15 |只看该作者
你这个结构体和数组没有什么区别

论坛徽章:
0
3 [报告]
发表于 2007-09-21 09:19 |只看该作者
原帖由 高峰 于 2007-9-21 09:15 发表
你这个结构体和数组没有什么区别


基本上可以认为你没想到真正的原因。

论坛徽章:
0
4 [报告]
发表于 2007-09-21 09:21 |只看该作者
原帖由 高峰 于 2007-9-21 09:15 发表
你这个结构体和数组没有什么区别

我觉得区别大了.

论坛徽章:
0
5 [报告]
发表于 2007-09-21 09:26 |只看该作者
你这个是碰巧吧,没有办法解释的。
至少我的linux上,没有出现你说的
/tmp>./a.out
10,2,-1073752952,-1073752944

论坛徽章:
0
6 [报告]
发表于 2007-09-21 09:27 |只看该作者
-4196416,-4196396,-4196392,-4196388
sparc solaris10 gcc version 3.3.2

论坛徽章:
0
7 [报告]
发表于 2007-09-21 09:28 |只看该作者
原帖由 ivhb 于 2007-9-21 09:26 发表
你这个是碰巧吧,没有办法解释的。
至少我的linux上,没有出现你说的
/tmp>./a.out
10,2,-1073752952,-1073752944


这个并非碰巧,
你用的64位机吧!

论坛徽章:
0
8 [报告]
发表于 2007-09-21 09:35 |只看该作者
原帖由 ivhb 于 2007-9-21 09:26 发表
你这个是碰巧吧,没有办法解释的。
至少我的linux上,没有出现你说的
/tmp>./a.out
10,2,-1073752952,-1073752944


1.

-bash-3.1$ ./a.out
10,2,-1370235320,-1370235312
-bash-3.1$ uname -a
Linux fc6.unix-center.net 2.6.18-1.2798.fc6 #1 SMP Mon Oct 16 14:39:22 EDT 2006 x86_64 x86_64 x86_64 GNU/Linux
-bash-3.1$ gcc --version
gcc (GCC) 4.1.1 20061011 (Red Hat 4.1.1-30)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

2.
[root@xxldc fftest]# ./a.out
10,8,2,4
[root@xxldc fftest]# uname -a
Linux xxldc 2.4.21-15.EL #1 Thu Apr 22 00:27:41 EDT 2004 i686 i686 i386 GNU/Linux
[root@xxldc fftest]# gcc --version
gcc (GCC) 3.2.3 20030502 (Red Hat Linux 3.2.3-34)
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

3,vs2005下面也是10,8,2,4  操作系统是win xp



是的,64位机表现不同,

[ 本帖最后由 xxldc 于 2007-9-21 09:44 编辑 ]

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
9 [报告]
发表于 2007-09-21 09:35 |只看该作者
飞灰可不可以详细解释一下,没碰到过这样用的,而且语法上竟然是允许的?为何&p+1地址仅仅只加了那么一点点

论坛徽章:
0
10 [报告]
发表于 2007-09-21 09:40 |只看该作者
我觉得关键是&p为什么就是结构体的第二个数,是关键。这个解决了&p+1, 自然就是第三个数。p是指针,在ILP32模型下,&p+1就是越过指针的宽度,也就是int的宽度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP