结构中的C char指针数组,如何

时间:2014-10-21 10:06:44

标签: c pointers struct bit-manipulation

我在理解如何访问结构中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]。

3 个答案:

答案 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个指针的数组。那可能不是你想要的。

此外,您从显示的代码中删除了一些必要的分号。