如何取消引用这个 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 中使用动态大小的纹理数组?
Qt中的2D游戏:初始化怪物并将动态分配的数组作为指针参数传递[关闭]