我运行以下代码,但它一直打印“4”
为什么打印“4”而不是“12”?我可以使用malloc然后使用sizeof吗?(如果我可以的话)
#include<stdio.h>
int main()
{
int arr1[3]={1,2,3};
int *arr2=arr1,i;
printf("%d",sizeof(arr2));
return 0;
}
答案 0 :(得分:8)
Pointers are not arrays。 arr2
是指向int
的指针。 sizeof(arr2)
将返回指针的大小。要打印数组的大小,sizeof
的操作数必须是数组类型:
printf("%u",sizeof(arr1));
我可以使用
malloc
然后使用sizeof
吗?
没有。没有可移植的方法来找出malloc块的大小。 malloc
返回指向已分配内存的指针。 sizeof
指针将返回指针本身的大小。但是您应该注意,在动态分配内存时不需要使用sizeof
。在这种情况下,您已经知道数组的大小。 (如果char
数组使用strlen
)。
进一步阅读:c-faq: Why doesn't sizeof
tell me the size of the block of memory pointed to by a pointer?
答案 1 :(得分:6)
arr2
是一个指针,您正在打印sizeof(pointer)
sizeof(arr1)
会给你sizeof数组,它可能会给你12.(给定你的整数是4个字节)
答案 2 :(得分:6)
sizeof(arr2)
会打印指针的大小,因为它是int*
。但是,如果您尝试sizeof(arr1)
,则会打印
sizeof(element_type) * array_size
即数组的大小。请记住,它没有考虑数组中有多少元素。它只会考虑可以存储多少个元素。
答案 3 :(得分:3)
它的打印4因为arr2
是一个指针,而指针的大小在32位架构中是4个字节。只有指向它的指针,你无法知道动态分配的数组(用malloc分配的数组)的大小。