遇到一些麻烦了解这两个代码段之间的差: 我分配动态范围内我的代码为一个整数数组空间与以下语句时的动态存储器分配和sizeof()
int *arr = calloc(cnt, sizeof(int));
在另一个函数中,我通过了arr,我想确定arr中的大小(元素数量)。 当我打电话
int arr_sz = sizeof(arr)/sizeof(int);
它只返回1,这是一个字节的只是数目为两个参数的int我假定(4/4)= 1。 我只是认为这将是一样使用阵列
int arr[8];
int arr_sz = sizeof(arr)/sizeof(int);
返回数组中元素的实际数量。
如果有人可以清除这件事,那会很好。谢谢!
数组是公正的指针,编译器可以帮助您管理。一旦他们通过一个函数,或者如果动态分配,编译器不能帮助你。 – slezica 2011-03-30 20:22:38
@Santiago Lezica :: *数组只是指针,编译器可以帮助您管理* - >这很奇怪。请通过 - http://www.lysator.liu.se/c/c-faq/c-2.html – Sadique 2011-03-30 20:27:52
您在报价中减半了我的评论。另一半很重要。 char a [10]和char * a之间显然有区别,当你键入一行或另一行时会发生不同的事情。 – slezica 2011-03-30 20:34:36