我想初始化一个二维数组,这样每行都有不同数量的元素。 更重要的是,行的元素数量取决于其前一行中的元素数量。 例如, 管理行中元素数量的函数是:
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.(错误的)
所以,这种方法在这里不起作用。
任何人都可以帮我这个。
答案 0 :(得分:3)
虽然您可以像C中的数组一样访问动态内存,但它具有不同的语义。当您要求sizeof(A)/sizeof(int)
时,您实际上是在询问sizeof(int *)/sizeof(int)
。由于这两个量相等(例如两个都是32位),答案是1
。
对于动态内存,“数组”的长度在编译时是未知的,因此您需要将其显式存储在单独的变量中。或者,您可以将内存及其长度作为单个变量包装在结构(或指向结构的指针)中。
答案 1 :(得分:0)
要么用循环计算数组中的元素。
或者给出
int *A; A=(int *)malloc(sizeof(int)*10);
看起来你已经知道了大小(10),所以当你构建数组的其余部分时,使用一个变量来跟踪下一行的元素数量。
答案 2 :(得分:0)
您的A
是int*
。数组实际上只是指向连续内存块的第一个元素的指针,没有关联的大小信息。这意味着sizeof(A)
是单个元素的大小。
由于你已经拥有数组的大小,你的代码应该可以正常工作。