读书人

一个指针变量的长度确实为4吗。int a[

发布时间: 2012-03-29 12:53:13 作者: rapoo

一个指针变量的长度确实为4吗。int a[5],sizeof(&a)是多少
#include<stdio.h>
int main(void)
{
int a[5];
int *p1,*p2;
p1=a;
//p2=&a;

printf("%d %d\n",sizeof(p1),sizeof(a[5]));
printf("%d %d\n",sizeof(&a[0]),sizeof(&a));

return 0;
}
为什么在vc中结果为:4 4 4 20;
而在gcc中结果为 4 4 4 4 ;

一个指针变量的长度确实为4吗。
int a[5]; sizeof(a)和sizeof(&a)为什么在vc中和Gcc中求的值不同;

&a和a前者是整个数组中的地址,后面是首元素的地址。他们在内存中存储有什么区别吗?

[解决办法]
这结贴率。。。。。
[解决办法]
个人觉得哈,&a是指针,sizeof(&a)应该是4的,sizeof(a)这个是20
[解决办法]
vc6的编译器有不少毛病,不用深刻分析
[解决办法]

探讨

在vc中结果为:sizeof(&a)是20,sizeof(&a)而在gcc中结果为 4 ;
但是sizeof(a)都是4,问题的关键可能是a和&a在内存中的存储问题,请哪位专家大虾给晚辈深刻分析分析。

[解决办法]
你知不知道turbo c是什么年代的?现在c++ builder也有些不合标准的地方。
[解决办法]
你要用就用最新版的vc
[解决办法]
探讨

不好意思,刚才有段疏忽打错了,sizeof(a)是20,但是我的问题是:在vc中结果为:sizeof(&a)是20,sizeof(&a)而在gcc中结果为 4 ;
引用:
引用:

在vc中结果为:sizeof(&a)是20,sizeof(&a)而在gcc中结果……

[解决办法]
楼主,珍惜生命,远离VC6
[解决办法]
指针长度等于地址编制长度~
你多少位的操作系统就是多少位的指针~
[解决办法]
按理说p1 = a = &a = &a[0]都是表示数组的起始地址 32位的一般都是4字节的
为什么会出现20 应该是编译器的问题了 书上还没看到&a是整个数组的地址大小的
可以运行下printf("%d %d %d %d\n",p1,a,&a,&a[0]);看看输出是不是一样
定义int a[5] 就只有a[0] a[1] a[2] a[3] a[4] 测试 sizeof(a[5])?
没定义内存,测出来的值就不是你定义的类型的大小了,是32位一般会给4bytes吧 这个我也不知道

读书人网 >C语言

热点推荐