반응형

** 포인터

 

&a : a의 주소값 // 실행 할 때 마다 주소값이 바뀜.

 

예)

int A = 10;

int *pA =100; // 일반값은 들어가지 않는다. 주소값만 들어간다.

int *pA = &A; // A의 주소값을 넣었다.

 

printf("A의 값 %d\n" , A);

printf("A의 주소값 %d\n" , &A);

printf("pA의 값 %d\n" , pA);

 

 

 

 

// A에는 일반 값을 가질 수 있다.

// *pA 포인터 변수에는 변수의 주소

 

값만 가질 수 있다.

 

printf("pA가 가르키는 값 %d\n",*pA);

 

 

포인터를 사용하면 특정 변수를 간접적으로 변경할 수 있다.

 

** Call by reference

 

 

** C언어는 기본적으로 Call by value

 

void swap (int a, int b){

int tmp =a;

a =b;

b=tmp;

}

int main(){
int data1 =10;

int data2 =20;

swap(data1,data2);

}

 

// 출력결과 데이터값이 바뀌지 않고 10,20으로 출력된다.

// swap함수를 쓰고 싶다면, 포인터를 이용한다.

 

void swap(int *a, int *b){

int tmp = *a;

*a=*b;

*b=tmp;

}

int main(){

int data1 = 10;

int data2 = 20;

swap(&data1, &data2);

}

 

// swap되어 출력된다.

 

*a : 포인터 변수 // a의 주소를 사용하겠다는 의미

&a : a의 주소값

 

** 전역변수를 써서 사용할 수도 있지만, 함수 코드를 공유할 때, 전역변수 까지 전달해야하는 번거로움이 있다.

// 포인터 함수를 사용하면 좀 더 편리하다.

 

 

 

 

void swap(int *a, int *b){  // int *a와 int *b 에 주소값을 저장한다.

int tmp = *a;  // tmp에 *a값을 저장한다. (주소값 X)

*a=*b;  // *a에 *b값을 저장한다.  (주소값 X)

*b=tmp; // *b에 tmp값을 저장한다.  (주소값 X)

}

 

 

int *pA = (int *) (300); // 포인터 변수 *pA의 주소값을 300으로 설정한다.

 

int *pA = &A; // A의 주소값을 넣었다.

 *pA = 1000; // A의 값에 1000을 넣었다.

 

 

반응형

'Study > C' 카테고리의 다른 글

C언어 - 배열 포인터  (0) 2018.08.28
C언어 - 포인터 2  (0) 2018.08.28
C언어 - Rullet 게임 만들기 2  (0) 2018.08.28
C언어 - Rullet 게임만들기  (0) 2018.08.27
C언어 - 난수 발생함수(random함수)  (0) 2018.08.27

+ Recent posts