본문 바로가기
programming/C

[C언어] 자료구조 - 포인터,배열,malloc

by 몽구스_ 2020. 7. 17.
728x90

 

 

모든 변수는 주소를 가진다.

포인터(pointer) : 메모리 주소를 값으로 가지는 변수

int *ptr;

 

 


 

 

& : 주소 추출

 

int c = 10;

int *p;

p = &c;

//변수 c가 저장되어있는 메모리주소를 p에 넣음

 

 

 

int x = 1;

int y = 1;

int *ip;

ip = &x; //x의 주소값1003가 ip에 저장됨.

y = *ip; //ip에 있던 1003의 주소값을 가진 x값, 즉 1이 y에 저장됨.

*ip = 0; //x가 0으로 됨.

1003

1

x

1004

1

y

1005

   

1006

1003

ip

1007

   

 

 

 

 

배열의 이름은 배열의 첫번째 값을 저장하는 포인터

int calculateSum(int *array)

int함수에서 배열을 매개변수로 넘겨줄 때, 포인터 사용 가능

 

array[1] == *(array+1)

array[i] == *(array+i)

 

 


 

c언어에서 char형1byte

 

동적메모리할당 -> malloc함수

 

#include <stdlib.h>

int *p;

p = (int *)malloc(40); //40바이트

if(p == NULL){

//동적메모리 할당 실패

}

p[0] = 1; //정수형 배열처럼 쓸 수 있음

 

 


 

int  * array = (int *)malloc(4*sizeof(int)); //4개 배열

array[0] = 1;

array[1] = 2;

array[2] = 3;

array[3] = 4;

 

int * tmp = (int *)malloc(8*sizeof(int)); //8개 배열

int i;

for(i=0; i<4; i++)

tmp[i] = array[i];

 

array = tmp;

 

//array의 크기 부족 상황 해결

 

array[4] = 5; //가능

 

 

 

 

 

댓글