프로그래밍[Univ]/C언어

[C언어]포인터 pointer <기본>

Cloud Travel 2008. 7. 22. 11:49

1. 데이터를 전달하는 방식
 1)   값  전달 방식 : 함수의 일반적인 값 전달 방식. 함수의 안정성과 독립성을 제공
 2) 주소 전달 방식 : ⓐ 함수를 호출한 후 실 매개 변수의 값이 변경되도록 하기위한 경우
                            ⓑ 함수의 결과 값을 두 개 이상 되돌리기 위한 경우
                            ⓒ 함수의 매개 변수가 배열인 경우

2. 포인터
 1) 주소값, 어드레스 라고도 불린다. 
    > 메모리상의 특정 위치 값을 의미한다.

 2) 포인터 연산자 "&" > 변수가 할당 되 있는 주소값이 출력된다.

 ex )
 #include<stdio.h>
 void main()
 {
  int a;
  a = 10;
  printf("a = %2d\ta의 주소 = %x\n",a,&a);
 }  
  결과  : a = 10       a의 주소 = 12ff7c
  (%x는 16진수를 출력할때 사용하는 것)

 3) 포인터 변수
  ⓐ * 기호 : 선언된 변수가 주소값을 저장할 수 있는 포인터 전용 변수라는 의미를 부여
                 문법 > 자료형 *포인터변수명;
  ⓑ
포인터 변수에는 주소 값만을 대입해야 한다.
       > 포인터 변수 = &변수;
  ex>
  01 #include<stdio.h>
  02 void main()
  03 {
  04  int a= 10;
  05  int *ptr_a;
  06  ptr_a = &a;
  07 printf("a = %d\t*ptr_a = %d\tptr_a = %x\n",a,*ptr_a,ptr_a);
  08 }

사용자 삽입 이미지

 4) 포인터 연산자
  ⓐ * : 포인터가 가르키는 메모리 주소에 있는 값을 추출
  ⓑ & : 변수의 주소를 추출
  > 위의 예에서 ptr_a의 값은 &a의 값과 같고
     *ptr_a의 값은 a의 값과 같다.

 5) 포인터를 이용하여 변수의 내용 변경
 #include<stdio.h>
 void main()
 {
  int a, b;
  int *ptr;

  a = 10;
  ptr = &a; //ptr에 a의 주소값을 설정
  b = *ptr; //b=a;
  *ptr = 20;//a=20;
  printf("a = %d  b = %d  \n",a,b);
 }

사용자 삽입 이미지