如何取消引用这个 2D 动态数组?

Posted

技术标签:

【中文标题】如何取消引用这个 2D 动态数组?【英文标题】:How can I dereference this 2D dynamic array? 【发布时间】:2016-05-25 02:37:26 【问题描述】:

我在第 5 行的 if 语句条件中取消引用二维动态数组时遇到问题。

typedef char* CharArrayPtr;

void reserveSeat(CharArrayPtr *m, char row, char seatLetter)
    for(int j = 1; j < 5; j++)
        if(m[row - 1][j] == seatLetter)
            m[row - 1][j] = 'X';
    

我尝试将 * 放在前面,但收到以下错误消息:

间接需要指针操作数('int'无效)

任何帮助表示赞赏,在此先感谢。

【问题讨论】:

什么是CharArrayPtr 还要解释你到底遇到了什么问题。包括任何相关编译器错误消息或运行时错误的确切文本 上面添加了CharArrayPtr的定义。 当我构建并运行时,编译器会停在那一行。我认为它认为我将地址与 char 值进行比较是错误的。 @borninla 这不是错误。您的错误在其他地方,很可能是您传递给函数的 m 变量管理不善。 【参考方案1】:

您没有将 m 作为二维数组传递,您使用了单个指针。

void reserveSeat(CharArrayPtr **m, char row, char seatLetter)

并取消引用它使用 ((w+i)+j);

【讨论】:

【参考方案2】:

如果您的意思是通过运算符 * 取消引用二维数组,请尝试以下操作。

typedef char* CharArrayPtr;

void reserveSeat(CharArrayPtr *m, char row, char seatLetter)
    for(int j = 1; j < 5; j++)
        //if(m[row - 1][j] == seatLetter)
        if( *( (char*)m + (row - 1)*5 + j ) == seatLetter)
            m[row - 1][j] = 'X';
       

【讨论】:

以上是关于如何取消引用这个 2D 动态数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 posix_memalign 动态分配 64B 对齐的 2D 指针数组

如何在 glTexImage2D 中使用动态大小的纹理数组?

在C中操作动态分配的2D char数组

Qt中的2D游戏:初始化怪物并将动态分配的数组作为指针参数传递[关闭]

不使用 Eval 动态引用 Javascript 数组名称?

将值设置为 2d 动态数组数组 C