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

发布于 2024-11-19 12:10:10 字数 493 浏览 4 评论 0原文

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

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。(错误) 所以,这种方法在这里不起作用。

任何人都可以帮我解决这个问题吗?

I want to initialize a 2-D array such that, every row has different number of elements.
Morever, the number of elements of a row depends on the number of elements in it's previous row.
For instance,
the function governing the number of elements in a row be:

Rows(N)= 2*Rows(N-1) +1 

where, Rows(N) is the number of cells in the Nth row.

The problem can be solved easily, if i can find the size of an array.
for instance,
I tried:

int A[10];

then it's size is sizeof(A)/sizeof(int), it gives me 10. (correct)

But if I allocate memory like:

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

and then check the value of sizeof(A)/sizeof(int), it gives me 1.(wrong)
So, this approach doesn't work here.

Can anybody help me on this one.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

裂开嘴轻声笑有多痛 2024-11-26 12:10:10

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

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

While you can access dynamic memory like an array in C, it has different semantics. When you ask for sizeof(A)/sizeof(int), you're actually asking sizeof(int *)/sizeof(int). Since those two quantities are equal (e.g. both 32-bit), the answer is 1.

With dynamic memory the length of the "array" is not known at compile-time, so you need to explicitly store it in a separate variable. Alternatively, you could wrap the memory and its length in a struct (or a pointer to the struct) around as a single variable.

行至春深 2024-11-26 12:10:10

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

或者考虑到

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

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

Either you count the elements in your array with a loop.

Or given

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

it seems you already know the size (10), so while you are building the rest of the array, use a variable to keep track the number of elements to go in the next row.

天暗了我发光 2024-11-26 12:10:10

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

由于您已经知道了数组的大小,因此您的代码应该可以正常工作。

Your A is an int*. Arrays really are just a pointer to the first element of a contiguous memory block, there is no size information associated. This means that sizeof(A) is the size of the single element.

Since you already have the size of the array, your code should work just fine with that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文