c - 三角形二维数组的动态内存分配

标签 c arrays pointers sizeof dynamic-memory-allocation

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

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/

相关文章:

c - 使用 pthread_create 时出现问题

C 程序没有给出正确的输出

c - afplay 错误 : AudioFileOpen failed (-43)

Python数组切片——如何实现二维数组切片?

python - 如何在不迭代的情况下基于成对的开始/结束索引定义 numpy 数组的多个切片?

javascript - 从对象数组中删除属性

c - 为什么我不能打印地址 0 的值?

更改 scanf() 分隔符

c - 将整数指针设置为整数数组并将参数传递给 pthread_create

C++ - 绑定(bind)函数