라벨이 C인 게시물 표시

배열 값 구조체에 넣기

이거 C로 프로그램 짜면서 자주 햇갈린다 struct { uint8 name; uint8 age; }info_t; 라는 구조체가 있고 배열 data[2]={"홍길도",17};의 값을 구조체 넣을려면 info_t *info; info = (info_t*) data; 이렇게 사용해주면 많은 구조체에 다량의 배열값을 넣을 때 유용하다. 하지만 위와 같은 방법은 로컬 함수에서 모든 일(?)이 있을 때는 유리하지만 전체 프로그램에서 공유해서 사용하는 값이라면 스텍에 겹쳐지면 지워질 수 있기 때문에 전체에서 사용하는 값이라면 맵 카피와 같은 방법을 사용해야 한다. memset(&info, data, sizeof(inof)); 와 같이 사용해야 한다. 자주 까먹는데 왜자꾸 까먹는건지 아니면 이해를 잘못해서 자꾸 까먹나?

C 구조체로 포인터 값 가져오기

개념을 잡아놔도 가끔 햇갈려서 잘못 쓸데가 많다 만약 구조체 typedef struct {   uint16  neighborAddress;   uint8   neighborExtAddr[Z_EXTADDR_LEN];   uint16  panId;   uint8   age;          // number of nwkLinkStatusPeriod since last link status   linkInfo_t linkInfo; } neighborEntry_t; 이런 놈이 있다고 하면 이런 놈들을 배열로 가지고 있는 놈은 이렇게 있을 수 있다. neighborEntry_t neighborTable[MAX_NEIGHBOR_ENTRIES]; 이럴 때 배열안에 들어있는 놈들을 하나씩 구조체로 받아서 사용해야한다. 아래처럼 neighborEntry_t *neighborEntry ; neighborEntry = &neighborTable[selectNum]; 이렇게 해야 포인터로 잡아놓은 놈( neighborEntry)한테 배열의 주소를 받아와서 맹글어놓은  neighborEntry에 쏙쏙 들어가 준다. 그런 다음 실제 값을 보고 싶다면  neighborEntry->panId 이렇게 하면 실제 값을 확인 할 수 있다.  자꾸 까먹는게 포인터로 받아와야되는 빨간부분인데.....빨간부분을 놓치면 자연스럽게 파란 부분도 까먹는다 이거야 원~~~~ 까먹지 말자

C sizeof

 - sizeof : 변수나 정의된 구조체의 크기를 알 수 있다. 단 포인터 값을 sizeof 하면 포인터의 크기인 4byte를 알려준다.