可能重复:
如何查找指向数组的指针的大小
我正在学习如何在C语言中创建动态数组,但遇到了一个问题,我无法解决。
如果我使用以下代码:
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
这是我期望发生的事情。不过,如果我像这样分配数组的大小:
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
不是指针,它是数组的“基地址”,所以sizeof()
会给出整个数组的总大小。 - krpra