Yuv*_*vid 0 c c++ arrays memory-management dynamic
我运行以下代码,但它一直打印"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;
}
Run Code Online (Sandbox Code Playgroud)
指针不是数组.arr2是一个指针int.sizeof(arr2)将返回指针的大小.要打印数组的大小,操作数sizeof必须是数组类型:
printf("%u",sizeof(arr1));
Run Code Online (Sandbox Code Playgroud)
我可以使用
malloc,然后sizeof?
没有.没有便携的方法可以找出malloc'ed区块的大小.malloc返回指向已分配内存的指针.sizeof该指针将返回指针本身的大小.但是您应该注意,在sizeof动态分配内存时不需要使用.在这种情况下,您已经知道数组的大小.(如果char使用阵列strlen).
进一步阅读:c-faq:为什么不sizeof告诉我指针所指向的内存块的大小?
sizeof(arr2)
Run Code Online (Sandbox Code Playgroud)
将打印指针的大小,因为它是一个int*.但是,如果你尝试sizeof(arr1),它会打印
sizeof(element_type) * array_size
Run Code Online (Sandbox Code Playgroud)
即阵列的大小.请记住,它没有考虑阵列中有多少元素.它只会考虑有多少元素可以存储.