[완료]구조체 멤버의 포인터나 배열요소 접근 방식처럼 사용 가능 여부.

0
points

아래와 같은 구조체 내의 멤버들을 포인터 요소 접근(*,++) 하듯이 할 수는 없을까요?
또는 배열 요소 접근(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));
}

익명사용자의 이미지

안됩니다.

0
points

Bit field는 말 그대로 구조체에 포함된 바이트를 비트 단위로 쪼개서 저장하기 때문에 주소를 구할 수 없습니다.

(주소는 바이트 단위까지만 나오죠. "0x1234 주소의 상위 5번째 비트" 이런 주소는 없죠.)

따라서 배열처럼 쓸 수도 없습니다. 배열처럼 쓰시려면 메모리를 좀 더 사용하는 셈치고 char array를 쓰시거나, 아니면 수동으로 char/int 등 적절한 크기의 숫자 변수를 잡고 macro를 사용하는 수가 있습니다.

typedef int bitfield;
#define GET_BIT(p, idx) ((p >> idx) & 0x01)

음, set, clear bit macro도 필요하겠군요. 이래저래 불편하긴 하죠.

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.