我想初始化一个二维数组,每一行都有不同数量的元素。 此外,一行的元素数取决于其前一行中的元素数。 例如, 控制一行中元素数量的函数是:
Rows(N)= 2*Rows(N-1) +1
其中,Rows(N) 是第 N 行中的单元格数。
如果我能找到数组的大小,这个问题就很容易解决了。 例如, 我试过:
int A[10];
然后它的大小是 sizeof(A)/sizeof(int)
,它给了我 10。(正确)
但是如果我像这样分配内存:
int *A;
A=(int *)malloc(sizeof(int)*10);
然后检查 sizeof(A)/sizeof(int)
的值,它给了我 1.(错误)
因此,这种方法在这里不起作用。
谁能帮我解决这个问题。
最佳答案
虽然您可以像 C 中的数组一样访问动态内存,但它具有不同的语义。当您请求 sizeof(A)/sizeof(int)
时,您实际上是在请求 sizeof(int *)/sizeof(int)
。由于这两个数量相等(例如,都是 32 位),答案是 1
。
对于动态内存,“数组”的长度在编译时是未知的,因此您需要将它明确地存储在一个单独的变量中。或者,您可以将内存及其长度作为单个变量包装在一个结构(或指向该结构的指针)中。
关于c - 三角形二维数组的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6644590/