[완료]구조체 멤버의 포인터나 배열요소 접근 방식처럼 사용 가능 여부.
글쓴이: coathanger / 작성시간: 월, 2007/03/05 - 9:28오전
아래와 같은 구조체 내의 멤버들을 포인터 요소 접근(*,++) 하듯이 할 수는 없을까요?
또는 배열 요소 접근(xx[0]) 하듯 가능하다면 예좀 들어주시면 감사하겠습니다..
field1.bit0 = 1; 이렇게 접근 하는 방법 이외의 방법을 말합니다.
아래 main함수 안의 내용처럼 하니.. 에러가 나는군요..
typedef struct
{
unsigned bit0 : 1;
unsigned bit1 : 1;
unsigned bit2 : 1;
unsigned bit3 : 1;
unsigned bit4 : 1;
}bitField;
bitField field1;
main()
{
field1.bit0 = 1;
field1.bit1 = 0;
field1.bit2 = 1;
unsigned* pTest = &field1.bit0; //에러..
printf("%d\n", *(pTest+1));
}
Forums:
안됩니다.
Bit field는 말 그대로 구조체에 포함된 바이트를 비트 단위로 쪼개서 저장하기 때문에 주소를 구할 수 없습니다.
(주소는 바이트 단위까지만 나오죠. "0x1234 주소의 상위 5번째 비트" 이런 주소는 없죠.)
따라서 배열처럼 쓸 수도 없습니다. 배열처럼 쓰시려면 메모리를 좀 더 사용하는 셈치고 char array를 쓰시거나, 아니면 수동으로 char/int 등 적절한 크기의 숫자 변수를 잡고 macro를 사용하는 수가 있습니다.
음, set, clear bit macro도 필요하겠군요. 이래저래 불편하긴 하죠.
댓글 달기