我怎么知道数组中的元素数量

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)

hac*_*cks 8

指针不是数组.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告诉我指针所指向的内存块的大小?


Gop*_*opi 6

arr2 是一个指针,你正在打印 sizeof(pointer)

sizeof(arr1) 会给你sizeof数组,它可能会给你12.(给定你的整数是4个字节)


rav*_*avi 6

sizeof(arr2)
Run Code Online (Sandbox Code Playgroud)

将打印指针的大小,因为它是一个int*.但是,如果你尝试sizeof(arr1),它会打印

sizeof(element_type) * array_size
Run Code Online (Sandbox Code Playgroud)

阵列的大小.请记住,它没有考虑阵列中有多少元素.它只会考虑有多少元素可以存储.