2009-03-21 3 views
0

typedef :typedef 배열에 대한 혼합 인덱싱 동작?

typedef unsigned char MyType[2]; 

함수에 전달하면 결과가 잘못됩니다! main()main()

void f(MyType * m) 
{ 
*m[0] = 0x55; 
*m[1] = 0x66; 
} 

void main(void) 
{ 
Mytype a; 
a[0] = 0x45; 
a[1] = 0x89; 

f(&a); 
} 
void f(MyType * m) 
{ 
*m[0] = 0x55; 
*m[1] = 0x66; 
} 

void main(void) 
{ 
Mytype a; 
a[0] = 0x45; 
a[1] = 0x89; 

f(&a); 
} 
main()의 변수 a 조작은 1 바이트 색인화에서 작동하므로 a는 {0x45, 0x89}와 같습니다. 그러나 함수 f에서 색인 작성은 2 바이트 ( sizeof 유형)에서 작동합니다.

따라서 함수 f에서이 인스턴스의 *m[1]는 실제로 메모리를 범위를 벗어난 것으로 수정합니다.

왜 이럴까? 내가 잊어 버린 것은 무엇인가?

감사합니다.

답변

4

시도 :

(*m)[1] 

대신 *m[1]

아 그냥 포기 후 운동했다
1

! 대괄호 소년, 대괄호.

void f(MyType * m) 
{ 
(*m)[0] = 0x55; 
(*m)[1] = 0x66; 
} 

void main(void) 
{ 
Mytype a; 
a[0] = 0x45; 
a[1] = 0x89; 

f(&a); 
} 
+0

왜 typedef가 맨 처음입니까? (* m) [0]은 추악합니다. – sigjuice

+0

나는 임베디드 응용 프로그램 용 API를 연구 중이며 공용 인터페이스 용 typedef 배열을 사용하여 배열 크기에 대한 프로그래밍 힌트로 실험하고 있습니다. 개발자는이를 읽거나 eclipse와 같은 IDE를 사용하여 dev 시간에 알립니다. 그래서 어색함은 단지 진입 점에 있습니다. – Oliver

+0

어쨌든 나는 그것을 시도하고 좋은 생각이 아니라고 결정했습니다. 지금 당장이 질문을 보는 것이 당혹 스럽습니다. – Oliver