我在理解这两个代码段之间的区别时遇到了一些麻烦:我使用以下语句在代码中动态地为整数数组分配空间
int *arr = calloc(cnt, sizeof(int));
Run Code Online (Sandbox Code Playgroud)
在另一个函数中,我传入arr,我想确定arr中的大小(元素数量).我打电话的时候
int arr_sz = sizeof(arr)/sizeof(int);
Run Code Online (Sandbox Code Playgroud)
它只返回1,这只是我假设(4/4)= 1的两个参数的int中的字节数.我只是假设它与使用数组相同
int arr[8];
int arr_sz = sizeof(arr)/sizeof(int);
Run Code Online (Sandbox Code Playgroud)
它返回数组中实际的元素数.
如果有人能清楚这一点,那就太好了.谢谢!
int *arr; ----> Pointer
int arr[8]; ----> Array
Run Code Online (Sandbox Code Playgroud)
首先你得到了什么 - int *arr是一个指针,指向一些字节的内存位置,而不是一个数组.
该类型的数组和一个指针的是不一样的.
在我传入arr的另一个函数中,我想确定arr中的大小(数字元素).我打电话的时候
int arr_sz = sizeof(arr)/sizeof(int);
Run Code Online (Sandbox Code Playgroud)
它只返回1,这只是我假设(4/4)= 1的两个参数的int中的字节数.我只是假设它与使用数组相同
即使是假定到是阵列-这是因为,当传递到功能阵列得到腐朽为指针.您需要在函数中显式传递数组大小作为单独的参数.
通过这个:
static数组和动态内存分配之间存在差异.
sizeof运算符不适用于动态分配.AFAIK最适合基于堆栈和预定义的类型.