2014-10-21 5 views
-1

구조체의 char 배열에서 지정된 위치에 액세스하는 방법에 문제가 있습니다.구조체의 C 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;입니다. 누군가 그것을 역 참조하는 좋은 설명이 있습니까? 추신 : 비트 맵을 가져 오는 방법을 알고 있지만 비트 맵 [i]은 이해하지 못했습니다.

+2

char bitmap [8] 대신에'char * bitmap [8]'의 이유가 있습니까? 당신이 원하는 것은'char *'의 배열이나 8 개의'char'의 배열을 선언하는 것입니다. –

+0

당신은 요점이 있습니다, 왜냐하면 그것은 단지 memblock만큼 커야 만 할 이유가 없습니다. 우선 제가 수정하려고 시도 할 것입니다. – zill69

+0

Adriano에 동의합니다. 그러나 mem.bitmap [0] = "test";와 같은 멤버에 액세스 할 것입니다. – Sadique

답변

0

정말 정말 char *의 배열을 의미한다 struct Memorybitmap의 인스턴스로 의미, 올바른 구문은 약 편집증 경우

*mem.bitmap[i] 

입니다 무엇을 bitmap[i] 포인트에 액세스 할 수

*(mem.bitmap[i]) 

하지만 모두 구성 요소 선택 연산자 . 및 첨자 연산자 우선 순위는, 당신은 몇 가지 괄호를 추가 할 수 있습니다 []은 단 하나의 *보다 높은 우선 순위를 가지므로 괄호는이 경우에 필요하지 않습니다.

memstruct Memory의 포인터 인 경우에만 -> 연산자를 사용하십시오.

이 모든 것을 말하면 비트 맵은 char 배열 대신 char에 대한 포인터 배열이어야합니다.

+0

나는 이것이 비트 맵을 문자 배열로 변경 했음에도 불구하고 이것이 내 질문에 대한 해답이라고 생각한다. Mem이 포인터인지 아닌지에 상관없이 mem-> bitmap을 내 코드 (shell)에 mem.bitmap과 섞어 놓았다. – zill69

1

먼저 char * bitmap [8]을 char bitmap [8]로 수정하십시오.

typedef struct Memory 
{ 
char bitmap[8]; 
char * memblock[64]; 
int i; 
//... 
}Memblock 

int somefunction(void) 
Memblock mem; 

은 그런 대신 MEM-를 사용> 비트 맵 [0] & 1 당신은 MEM은 메모리에 대한 포인터가 아니므로, mem.bitmap [0] & 1을 사용합니다.

+0

및 세미콜론 중 일부가 누락되었습니다. 나는 너 자신을 고칠 것이라고 생각하고있다. –

0

구조체에있는 문자에 대한 8 개의 포인터 배열과 문자에 대한 64 개의 포인터 배열을 선언했습니다. Memory. 그건 네가 의도 한 바가 아닐거야.

또한 표시된 코드에서 필요한 세미콜론을 삭제했습니다. mem 가정