这是我的示例代码
#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));
}
Run Code Online (Sandbox Code Playgroud)
现在,据我所知,大小将告诉我存储变量所需的大小,现在这个的输出是
24 4 4
为什么它的大小arr=24只是一个指针而且它的大小应该是4?
谢谢.
"......毕竟它只是一个指针......"?不.数组不是指针.Array是一个数组对象:一个固定的连续内存块,用于存储数组元素,不涉及任何类型的指针.在你的情况下,数组有6个元素,每个元素大小为4.这就是为什么你的sizeof评价为24.
关于数组作为指针的常见误解已经被揭穿了数百万次,但不知怎的,它不时地继续出现.阅读常见问题解答,如果您对此有任何疑问,请回来
http://c-faq.com/aryptr/index.html
PS正如@Joachim Pileborg在答案中正确指出的那样,sizeof不是一个功能.这是一个运营商.
数组行为与指针不同的另一个上下文是一元运算&符("地址"运算符).当将一元&应用于类型的指针时,int *会产生一个类型的指针int **.当将一元&应用于类型数组时,int [10]会生成一个类型的指针int (*)[10].这是两种截然不同的类型.
int *p = 0;
int a[10] = { 0 };
int **p1 = &p; /* OK */
int **p2 = &a; /* ERROR */
int (*p3)[10] = &a; /* OK */
Run Code Online (Sandbox Code Playgroud)
它是另一个流行的问题(和错误)来源:有时候人们希望在应用于数组时&产生int **指针int [10].