** 포인터
&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 |