可能重复:
How to find the sizeof(a pointer pointing to an array)C,malloc()和数组长度
我正在学习如何创造下的动态数组,但所遇到的问题,我可以不知道。
如果我使用的代码:
int num[10];
for (int i = 0; i < 10; i++) {
num[i] = i;
}
printf("sizeof num = %li\n sizeof num[0] = %li", sizeof(num), sizeof(num[0]));
我得到的输出:
sizeof num = 40
sizeof num[0] = 4
这是我所期待的事情发生。但是,如果我喜欢的malloc数组的大小:
int *num;
num = malloc(10 * sizeof(int));
for (int i = 0; i < 10; i++) {
num[i] = i;
}
printf("sizeof num = %li\n sizeof num[0] = %li", sizeof(num), sizeof(num[0]));
然后我得到的输出:
sizeof num = 8
sizeof num[0] = 4
我很好奇,想知道为什么数组的大小为40,当我使用固定长度方法,但不是当我使用malloc()
时。
'num'是第二种情况下指向int的指针,其大小取决于机器,即对于32位,它是4字节,对于64位,它是8字节。而在第一种情况下,num不是指针,它是'base数组的地址'sizeof()'给出数组的总大小。 。 – krpra