以下程序的输出
#include<stdio.h>
int main(){
int *p[10];
printf("%ld %ld\n",sizeof(*p),sizeof(p));
}
Run Code Online (Sandbox Code Playgroud)
是
8 <--- sizeof(*p) gives size of single element in the array of int *p[10]
80 <--- sizeof(p) gives size of whole array which is 10 * 8 in size.
Run Code Online (Sandbox Code Playgroud)
现在看下面的程序
#include<stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};
int main()
{
int d;
printf("sizeof(array) = %ld \n",sizeof(array));
printf("sizeof(array[0]) = %ld \n",sizeof(array[0]));
printf("sizeof int %ld\n",sizeof(int));
printf("TOTAL_ELEMENTS=%ld \n",TOTAL_ELEMENTS);
for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是
sizeof(array) = 28
sizeof(array[0]) = 4 <--here
sizeof int 4
TOTAL_ELEMENTS=7
Run Code Online (Sandbox Code Playgroud)
我无法理解的是为什么sizeof(array [0])在两个输出中都不同.
Can*_*ell 11
int *p[10];
是一个指针数组.
*p
是指针数组的第一个元素.所以它是一个指向整数的指针.它不是整数.
int array[] = {23,34,12,17,204,99,16};是一个整数数组.所以array[0]是该数组的第一个元素.所以它是一个整数.
指向整数(*p)和整数(array[0])的指针的大小是不同的.
所以sizeof(*p)并且sizeof(array[0])
不同.
sizeof(p)给出指针数组的大小.所以它是:10 x 8 = 80.
ie(元素数量)x(一个元素的大小)
sizeof(array)给出整数数组的大小.所以它是:7 x 4 = 28.