본문 바로가기
Etc./C

[C] 포인터, 배열, 동적메모리할당

by ahj 2021. 10. 9.

포인터와 배열은 비슷한 역할을 수행해줄 수 있다.

배열 선언을 통해 정해진 배열의 이름은 배열의 시작 주소를 저장하는 포인터 변수 같은 역할을 수행한다. 하지만 보통의 포인터 변수와는 다르게 그 값을 변경할 수 없다는 가장 큰 차이가 있다.

예를 들면

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

댓글