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]
는 실제로 메모리를 범위를 벗어난 것으로 수정합니다.
왜 이럴까? 내가 잊어 버린 것은 무엇인가?
감사합니다.
왜 typedef가 맨 처음입니까? (* m) [0]은 추악합니다. – sigjuice
나는 임베디드 응용 프로그램 용 API를 연구 중이며 공용 인터페이스 용 typedef 배열을 사용하여 배열 크기에 대한 프로그래밍 힌트로 실험하고 있습니다. 개발자는이를 읽거나 eclipse와 같은 IDE를 사용하여 dev 시간에 알립니다. 그래서 어색함은 단지 진입 점에 있습니다. – Oliver
어쨌든 나는 그것을 시도하고 좋은 생각이 아니라고 결정했습니다. 지금 당장이 질문을 보는 것이 당혹 스럽습니다. – Oliver