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씩 증가한다.
따로 다시 공부해서 능숙하게 해야겠음 살짝 헷갈림
일단 끝
c언어 스택 -3일차 (2) | 2022.12.07 |
---|---|
c언어 메모리할당 메모 -3일차..첫 번째 (0) | 2022.12.07 |
c언어 메모,정리 배열,포인터 -3일차 두번째 (0) | 2022.12.07 |
c언어 메모, 정리 배열, 포인터-3일차 첫번째 (0) | 2022.12.07 |
2일차 포인터 변수~c언어 (0) | 2022.12.06 |