티스토리 뷰

C

포인터

猫猫 2014. 9. 12. 10:52
반응형

포인터란 주소값의 저장을 목적으로 선언된다.


자료형 *포인터변수명;

으로 선언된다.


포인터의 자료형은 메모리공간을 참조하는(=접근하는) 기준이 된다. 

즉 int형의 포인터인경우 4바이트만 접근 가능하다.


포인터는 주소값을 저장하기 때문에 &연산자로 얻어온 주소값을 저장하거나, 

배열의 시작주소(=배열명) 을 저장하여 접근 가능하다.


*(p+2): p번지+2

 *p+2 : p번지의 내용에 +2 

괄호의 사용에 주의한다.



ex)

void main(){


int arr[3]={1,2,3};


int *p = arr;


for( int i=0; i<3; i++){

printf("%d, ", *(p+i)); //p+i가 가리키는 값 즉 arr[i]와 같다.

}

}



포인터는 함수의 인자로 받는것도 가능하다.

값을 전달하는 형태의 함수호출을 call by value라고 하며 

주소를 전달하는 형태의 함수호출을 call by reference라고 한다.


ex)

void main()

{

char a;

int b;

float c;

InputData(&a,&b,&c);//call by reference

OutputData(a,b,c);//call by value


}


void InputData(char *p1, int *p2, float *p3)

{

scanf("%c", p1);

scanf("%d", p2);

scanf("%f", p3);

}


void OutputData(char n1, int n2, float n3)//call by value방식 반환

{

printf("%c, %d, %f", n1, n2, n3);

}


void OutputData(char *p_n1, int *p_n2, float *p_n3)// call by reference 방식 반환

{

printf("%c, %d, %f", n1, n2, n3);

}



/////////////////////////////////////////////////////////////////////////////////////////////////



이중 포인터


int temp=30;

int *p = &temp;//포인터 p에 temp 주소값 저장

int **p2 = &p;//pp p2에 p의 주소값 저장


printf("%d, %d\n", &p, p2); //p의주소, p2의 값 출력

printf("%d,%d,%d\n", &temp, p, *p2); 

printf("%d, %d, %d\n", temp, *p, **p2);


**p2 = 100;

printf("%d,%d,%d\n", temp, *p, **p2);



반응형

'C' 카테고리의 다른 글

라이브러리 함수  (0) 2014.09.12
구조체  (0) 2014.09.12
배열  (0) 2014.09.12
함수  (0) 2014.09.12
조건문  (0) 2014.09.12