이기적 정보처리기사 필기 교재의 내용을 바탕으로 작성되었습니다.
포인터 연산자
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;
}
😎 해설!
- fa 함수에서 x 만큼의 공간과 *y의 공간과 주소값이 설정됨.
- main에서 n 이라는 공간에 10이 할당되고 k라는 공간에 20이 할당됨.
- fa함수를 불러서 n과 k의 주소값을 인자로 저달
- fa함수에서 x = 15가 되고 *y로 k의 주소값을 전달했으므로 *y의 주소값 위치에 있는 k의 값이 25가 됨
변수 할당되고 그런걸 그림으로 그려서 문제를 많이 풀다보면 이해가 될것임!
'STUDY > [정보처리기사] 필기&실기' 카테고리의 다른 글
[용어 정리] 기출 모의고사 (2020년 1회) (0) | 2022.04.17 |
---|---|
[용어 정리] 실전 모의고사 3회 (0) | 2022.04.12 |
[SQL 응용] SQL 명령어의 분류 및 사용 (0) | 2022.04.10 |
[용어정리] 실전 모의고사 2회 (0) | 2022.04.07 |
[용어정리] 실전 모의고사 1회 (0) | 2022.03.28 |