상세 컨텐츠

본문 제목

c언어 메모,정리 배열,포인터 -3일차 세 번째

코딩

by Davinc2 2022. 12. 7. 15:08

본문

hi..

 

배열과 포인터

 

char *형 포인터 변수가 3개 -> char *p1, *p2, *p3; 이렇게 선언

만약 포인터가 100개 필요하면 너무 불편.

그래서

포인터 변수도 배열로 선언가능

char *p[5];        //char *p1, *p2, *p3, *p4, *p5 와 같다.

크기는 20바이트.

 

char data1, data2, data3, data4, data5, i;

 

char *p[5] = {&data1, &data2, &data3. &data4, &data5};   //p[0] 는 data1주소 p[1] 는 data2주소 ....p[4]는data5주소

 

for(i = 0; i < 5; i++)   *p[i] = 0;     // data1 ~data5에 모두 0 저장.    

 

포인터 기준 배열

char *(p[5]);는 배열기준이다

 

char (*p)[5];는 포인터 기준이다.

 

이렇게 선언하면 (*p)가 먼저 처리된다 떄문에 p는 배열이 아니라 포인터라는 뜻.

 

따라서 p 변수 자체가 4바이트 크기이다. 그 다음 조건인 char[5]에 의해

 

포인터 변수 p가 가리키는 대상 크기가 5바이트 라는 뜻이다

 

일반 포인터는 *p라고 적으면 자신이 가리키는 대상에 가서 값을 읽거나 쓸 수 있지만, 

 

위 포인터 ㅂㄴ수는 가리키는 대상이 배열 형식 (char[5])으로 선언 되어있어 []를 사용하여 

 

대상을 한 번 더 선택해야함 

 

에를들어 대상의 5바이트 중 3번째에 7값을 넣고 싶다면 

 

(*p)[2] = 7;   으로 사용해야함

 

보통 이런식의 포인터는 2차원 배열을 가리키는 용도로 사용

 

참고로

p++; == p = p + 1;  과 같고 주소가 5씩 증가한다.

 

 

 

따로 다시 공부해서 능숙하게 해야겠음 살짝 헷갈림

일단 끝

 

 

 

관련글 더보기