포인터와 배열은 비슷한 역할을 수행해줄 수 있다.
배열 선언을 통해 정해진 배열의 이름은 배열의 시작 주소를 저장하는 포인터 변수 같은 역할을 수행한다. 하지만 보통의 포인터 변수와는 다르게 그 값을 변경할 수 없다는 가장 큰 차이가 있다.
예를 들면
int a[10];을 선언해주면
a는 배열의 시작 주소를 저장하는 포인터 변수가 된다.
그래서 *(a+i)==a[i]
하지만 문제는 동적메모리할당을 공부해보면 이어진다.
동적 메모리 할당(malloc)에서
int * a = (int*)malloc(4*sizeof(int));
int * temp = (int*)malloc(8*sizeof(int));
a=temp;
이렇게 a의 메모리를 새롭게 할당할 수 있다.
하지만 배열을 포인터처럼 이용하면 (예를 들면)
int a[4];
int * temp = (int*)malloc(8*sizeof(int));
a=temp;//여기에서 오류가 난다.
왜냐하면 배열로 할단 된 포인터는 변경할 수 없기 때문이다.
'Etc. > C' 카테고리의 다른 글
[C] 문자열 공백/띄어쓰기 입력 (0) | 2021.09.26 |
---|---|
[C] 데이터 처리 (0) | 2021.09.21 |
[C] 삼항연산자 (0) | 2021.09.21 |
[C/C++] 포인터 (0) | 2021.09.19 |
댓글