본문 바로가기
STUDY/[정보처리기사] 필기&실기

[절차지향 프로그래밍] C언어 자료구조와 포인터

by 하루디 2022. 4. 11.

이기적 정보처리기사 필기 교재의 내용을 바탕으로 작성되었습니다.

 

포인터 연산자 

1) 개념 

  • 기억장치에 저장된 데이터를 참조할 때 식별자가 아닌 주소값으로 접근할 수 있는 연산자이다
  • 복사된 데이터를 가공하는 것이 아닌, 데이터 원본을 가공할 수 있다.
  • 주소값을 사용하기 때문에 포인터 연산이 가능하다
  • 데이터 식별자 앞에 '&'을 붙이면 해당 데이터의 주소값을 알 수 있다. 
  • 포인터 변수 앞에 '*'을 붙이면 해당 주소의 데이터를 사용할 수 있다.

 

2) 😊포인터 변수😊

  •  포인터 변수는 데이터를 저장하지 않고 주소값을 저장하며 타입이 달라도 크기가 동일하다.
  • <참조할 데이터 타입>*<식별자>; 형식으로 선언한다 (ex: int *p;)
  • <포인터 변수> =&<데이터변수>; 형식을로 주소값을 할당한다. (ex: p = &data;)
  • *<포인터 변수> = <값>; 의 형태로 포인터 변수에 저장된 주소에 해당하는 위치에 값을 할당한다. (ex: *p = 20;)

 

3) 배열과 포인터

  • 배열이름은 주소상수이기 때문에 주소값 재할당이 불가능하다
  • 포인터 변수는 주소값 재할당이 가능하고 포인터 연산도 가능하다.
  • 배열주소를 포인터 변수에 할당하면 포인터 이름으로도 배열을 제어할 수 있다.
  • 첨자를 활용하거나, 포인터 연산을 활용하여 데이터에 접근할 수 있다./
int main{

    int arr[5]= {1,6,4,5,3}; //배열 생성 
    int *pr; //포인터 변수 생성 

    pr = ar 

    printf("%d \n", ar[2]) //4
    printf("%d \n", pr[2]) //4
    printf("%d \n", *(pr+2)) //4
    
}

 

4) 🤞참조에 의한 매개변수 전달(Call By Reference)🤞  ★★★ 실기多 ★★★

  • Call By Value : 함수에 인수를 전달하면, 원본값이 복사되어 매개변수에 전달된다.
  • 원본값을 변경하기 위해서 주소값과 포인터를 이용하여 함수를 정의한다.
  • 주소값을 인수로 전달하고, 매개변수에 포인터변수를 지정한다.
void fa(int x, int *y)
{	x= x+5; //x값에 5 증가
   	*y = *y+5; //y에 저장된 주소값 위치로 이동하여 5 증가
    	return;

}

int main()
{
	 int n =10, k=20;
     	fa(n, &k); //fa 함수를 호출하여 x->n, 포인터변수 y에 k의 주소값 할당
     
     	print("%d %d",n, k); //n =10, k=25 출력
     	return 0;

}

 

😎 해설!

  1. fa 함수에서 x 만큼의 공간과 *y의 공간과 주소값이 설정됨.
  2. main에서 n 이라는 공간에 10이 할당되고 k라는 공간에 20이 할당됨.
  3. fa함수를 불러서 n과 k의 주소값을 인자로 저달
  4. fa함수에서 x = 15가 되고 *y로 k의 주소값을 전달했으므로 *y의 주소값 위치에 있는 k의 값이 25가 됨

변수 할당되고 그런걸 그림으로 그려서 문제를 많이 풀다보면 이해가 될것임!