这是我的示例代码
#include<stdio.h>
void main()
{
int arr[]={1,2,3,4,5,6};
char *ptr,a;
a='c';
ptr=&a;
int *ptr1,a1;
a1=4;
ptr1=&a1;
printf("%d %d %d",sizeof(arr), sizeof(ptr1), sizeof(ptr));
}
现在,据我了解, size of 将告诉我存储变量所需的大小,现在这个的输出是
24 4 4
为什么尺寸是arr=24
,毕竟它只是一个指针,它应该有 size =4 ?
Thanks.
“……毕竟这只是一个指针……”?不,数组不是指针。数组是一个数组对象:存储数组元素的固体连续内存块,不涉及任何类型的指针。在你的例子中,数组有 6 个元素,每个元素的大小为 4。这就是为什么你的sizeof
评估为 24。
关于数组是指针的常见误解已经被揭穿了数百万次,但不知怎的,它仍然时不时地出现。阅读常见问题解答,如果您有任何疑问,请回来
http://c-faq.com/aryptr/index.html http://c-faq.com/aryptr/index.html
附:正如@Joachim Pileborg 在他的回答中正确指出的那样,sizeof
不是一个函数。它是一个运算符。
数组与指针的行为不同的另一个上下文是一元&
运算符(“地址”运算符)。当一元&
应用于类型的指针int *
is 产生一个类型的指针int **
。当一元&
应用于类型数组int [10]
is 产生一个类型的指针int (*)[10]
。这是两种截然不同的类型。
int *p = 0;
int a[10] = { 0 };
int **p1 = &p; /* OK */
int **p2 = &a; /* ERROR */
int (*p3)[10] = &a; /* OK */
这是问题(和错误)的另一个常见来源:有时人们期望&
生产一个int **
应用于指针时int [10]
array.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)