C 三角形二维阵列的动态内存分配

C 三角形二维阵列的动态内存分配,c,arrays,pointers,sizeof,dynamic-memory-allocation,C,Arrays,Pointers,Sizeof,Dynamic Memory Allocation,我想初始化一个二维数组,这样,每一行都有不同数量的元素。 此外,一行的元素数取决于其前一行的元素数。 例如, 控制行中元素数量的函数应为: Rows(N)= 2*Rows(N-1) +1 其中,Rows(N)是第N行中的单元格数 如果我能找到数组的大小,这个问题很容易解决。 例如, 我试过: 然后它的大小是sizeof(A)/sizeof(int),它给我10。(正确) 但如果我像这样分配内存: int *A; A=(int *)malloc(sizeof(int)*10); 然后检查si

我想初始化一个二维数组,这样,每一行都有不同数量的元素。 此外,一行的元素数取决于其前一行的元素数。 例如, 控制行中元素数量的函数应为:

Rows(N)= 2*Rows(N-1) +1 
其中,Rows(N)是第N行中的单元格数

如果我能找到数组的大小,这个问题很容易解决。 例如, 我试过:

然后它的大小是
sizeof(A)/sizeof(int)
,它给我10。(正确)

但如果我像这样分配内存:

int *A;
A=(int *)malloc(sizeof(int)*10);
然后检查
sizeof(A)/sizeof(int)
的值,它给我1。(错误) 所以,这种方法在这里不起作用


有谁能帮我解决这个问题。

要么用循环计算数组中的元素

或给予

int *A; A=(int *)malloc(sizeof(int)*10);

似乎您已经知道了大小(10),因此在构建数组的其余部分时,请使用一个变量来跟踪下一行中的元素数。

您的
a
int*
。数组实际上只是指向连续内存块的第一个元素的指针,没有关联的大小信息。这意味着
sizeof(A)
是单个元素的大小


由于您已经有了数组的大小,因此代码应该可以很好地处理它。

虽然您可以像C中的数组一样访问动态内存,但它具有不同的语义。当你要求
sizeof(A)/sizeof(int)
时,你实际上是在要求
sizeof(int*)/sizeof(int)
。由于这两个量相等(例如,均为32位),因此答案为
1


对于动态内存,“数组”的长度在编译时是未知的,因此需要将其显式存储在单独的变量中。或者,您可以将内存及其长度作为单个变量包装在结构(或指向结构的指针)中。

不,我不知道元素的数量。我举了一个例子,我无法通过以下方式获得sizeof数组:sizeof()/sizeof(int),其中是arrayname变量。我假设您知道数组第一行的大小(否则,数字如何根据公式增长)。因此,您可以使用公式计算循环每次迭代中下一行的大小。我看不出有什么问题。
A
是指针
sizeof(A)
正确返回指针的大小,而不是指向的对象的大小。
int *A; A=(int *)malloc(sizeof(int)*10);