使用指针动态创建二维数组

Posted

技术标签:

【中文标题】使用指针动态创建二维数组【英文标题】:Creating a 2D array dynamically using pointers 【发布时间】:2021-03-28 11:04:47 【问题描述】:
// Trying to create 2D array dynamically using pointers

#include <stdio.h>
#include <malloc.h>
int main()

    int *pool, **pool2, r = 3, c = 4;  /* r and c corresponds to rows and columns respectively */

    pool = (int *)calloc((r * c), sizeof(int)); /* creating all the blocks of int of 2D array*/
    pool2 = (int **)calloc(r, sizeof(int *));  /* using double pointers same as the number of rows with a thought of storing base addresses of each row*/

    int count = 0;
    for (int k = 0; k <= (r - 1); k++)
    
        pool2[k][0] = &pool[count]; /* my query here : Since pool is of (int *) type, pool2 (being a double pointer) should be able to store the address of pool.*/

     // pool2[k] = &pool[count]; /* <------ BUT This WORKS FINE (after un-commenting)... instead of the above line !! */

        for (int m = 0; m <= (c - 1); m++)
        
            printf("pool2[%d][%d] = %d\n", k, m, pool2[k][m]);
        

        count += c; /* count increases to give the address of first block of the row (using &pool[count])*/
    
    
    free(pool);
    free(pool2);

    return 0;

输出:

warning: assignment makes integer from pointer without a cast [-Wint-conversion]

pool2[k][0] = &pool[count];

为什么双指针(pool2)不能存储'pointer to int'的地址。

【问题讨论】:

推荐阅读:How to Debug Small Programs 你读过代码中的cmets吗??我没有要求调试我的代码,输出警告只是为了给出一个想法。当然,我搜索了该警告消息并尝试阅读与之相关的其他主题和问题。我在这里问了一个具体的事情,我可能会错过这个概念。这就是为什么我专门创建一个帐户只是为了问这个问题。这是我在这个网站上的第一个问题,也许我的方式是错误的.. 但至少试着首先了解实际询问的内容。谢谢你的评论。 【参考方案1】:

RHS &amp;pool[count] 返回一个地址。它是pool 数组中count 插槽的地址。 LHS pool2[k][0] 是对整数槽的引用。编译器正确地表明您正在尝试将指针分配给整数。

【讨论】:

嗯..我认为pool2[k][0]也应该对应pool2数组的第一个槽的值。也许为了避免混淆,我应该使用指针去引用来表示为它分配任何值或地址的确切插槽。

以上是关于使用指针动态创建二维数组的主要内容,如果未能解决你的问题,请参考以下文章

指向 C++ 中动态分配的二维数组中的一行的指针

指针对指针的动态二维数组

如何使用 C++ 中的指针动态分配和解除分配二维数组?

创建动态二维数组

动态创建二维素组

如何在 C++ 中初始化指向动态二维数组的指针 [关闭]