我在理解如何访问结构中char数组中的指定位置时遇到问题。
typedef struct Memory
{
char * bitmap[8];
char * memblock[64];
int i;
//...
}Memblock
int somefunction(void)
Memblock mem;
假设我已经分配了stuct,现在想对位图执行按位操作:bitmap[0] & 1
;
尝试*mem->bitmap[0] & 1;
但没有任何运气。有人有很好的解释如何取消引用它吗?
PS:我理解如何获取位图,但不知道位图[i]。
答案 0 :(得分:2)
首先将char * bitmap [8]修复为char位图[8]。
typedef struct Memory
{
char bitmap[8];
char * memblock[64];
int i;
//...
}Memblock
int somefunction(void)
Memblock mem;
然后代替使用mem-> bitmap [0]& 1你需要使用mem.bitmap [0]& 1,因为mem不是Memory的指针。
答案 1 :(得分:1)
假设mem
确实是struct Memory
的实例而bitmap
实际上是char *
的数组,正确的语法来访问bitmap[i]
*mem.bitmap[i]
1}}指向是
*(mem.bitmap[i])
如果您对优先权感到偏执,可以添加一些括号:
.
但是组件选择运算符[]
和下标运算符*
的优先级高于一元->
,因此在这种情况下不需要括号。
如果mem
是指向struct Memory
的指针,则只能使用char
运算符。
说了这么多,你确定位图需要是指向char
而不是{{1}}数组的指针数组吗?
答案 2 :(得分:0)
您已经声明了一个包含8个指向字符的数组的数组,以及另一个包含指向结构Memory
中字符的64个指针的数组。那可能不是你想要的。
此外,您从显示的代码中删除了一些必要的分号。