这是我要做的事情的本质:
double *E; //Array of doubles
int N; //The eventual size of the array, typically >1
// some code where variable N gets assigned
//inside of some function
E = malloc(sizeof(double)*N);
printf("size of E = %lun",sizeof(E)/sizeof(E[0])); //checking size of array E
无论N的实际值如何
我知道这似乎很基本,但是我不明白为什么这会起作用。
任何见解都将不胜感激。
您本质上是将指针的大小除以双重大小。两者都采用相同数量的字节(通常为8个)存储。因此,您得到1。
e的类型是双重指针。E的价值是一个地址。当您获得尺寸(e)时,您将获得变量的大小,即指针的大小,而不是变量指向的大小。为了获得分配的Malloc的大小,您需要在大小上放置指针,以便您的最后一行变为:
printf("size of E = %lun",sizeof(*E) * N/sizeof(E[0]));
编辑
*e和e [0]之间没有差异,如其中一条评论所指出的那样。在C中,您无法知道数组在哪里结束,因为数组本身作为数据类型不会存储其长度。这就是为什么需要C 中的向量数据类型的部分原因。
另外,由于您已经将数组的长度存储在n中,因此您也可能只打印N。当您将数组传递到任何功能时,请与长度一起传递数组。使用字符串,您可以在字符数组中迭代到" 0"(无效终止字符)。对于整数和浮点数据类型数组,没有这样的约定。
malloc正在分配正确的大小数组,否则您的测试是错误的。
sizeof(e)是指针的大小= 8
sizeof(*e)是第一个double = 8
的大小您可以知道数组大小的大小( * e) * n
如果sizeof(E)
按照您的预期工作(给出分配的内存的大小,而不是指针的大小),则在此解释上进行另一种旋转动态分配阵列的大小。您不能在c。