728x90
CH07 포인터
1. 포인터(pointer) 변수
- 주소참조: 메모리 여역에는 주소가 부여되어 있다
- 포인터 변수: 포인터 값을 다룰 수 있는 변수
- & (주소연산자)
- * (포인터연산자, 간접연산자)
포인터(pointer)
- 특정한 데이터가 저장된 주소값(시작주소)을저장하는 변수
- 하나의 주소값은 1바이트 크기의 메모릭공간을 표현함
- 형식: 자료형 * 포인터변수명;
# 포인터변수 선언문;
{
int *p1;
int* p2;
2. 포인터배열변수와 연산자
- & (주소연산자)
- 모든 변수에 대한 주소값을 구하는 연산자
- * (포인터연산자, 간접연산자, 내용연산자)
- 포인터 변수의 자료(내용)을 구하는 연산자
# 포인터변수 예시
#include <stdio.h>
void main()
{
int num;
int* p1;
num = 100;
p1 = # # &: 주소연산자
printf("일반변수 접근: %d", num); # 100
printf("포인터변수 접근: %d", *p1); # 100
}
풀이
10번지 | 1000번지 |
p1 | num |
- num = 100
- 'p1 = &num': p1의 주소를 num의 주소로 바꿈
- p1은 1000번지 즉, p1의 값도 100
3. 포인터배열변수와 배열
# 포인터변수 예시2
#include <stdio.h>
void main()
{
int i
int A[] = {10, 20, 30, 40, 50};
int* p;
p = A; # p = &A[0]
for(i=0;, i<5;, i++)
{
printf("%5d", *(p+i)); # printf("%5d", A[i])
}
}
풀이
A[0] | A[1] | A[2] | A[3] | A[4] |
10 | 20 | 30 | 40 | 50 |
100번지 | 101번지 | 102번지 | 103번지 | 104번지 |
- p = A;: 포인터 변수 p에 배열 A의 첫 번째 요소를 가리키는 포인터를 할당, 배열 이름 A는 해당 배열의 첫 번째 요소의 주소를 가리키므로, p = &A[0];와 동일한 역할
- for(i=0;, i<5;, i++): 반복문을 사용하여 배열의 요소를 출력
- printf("%5d", *(p+i));: 포인터 변수 p와 루프 변수 i를 사용하여 배열 A의 요소를 출력, *(p+i)는 포인터 p가 가리키는 메모리 주소에 있는 값을 가져오는 것으로, 이는 A[i]와 동일
- %5d 형식 지정자는 출력될 숫자를 오른쪽으로 정렬하고 최소한 5자리의 공간을 확보하도록 지정
출력 10 20 30 40 50
4. 포인터변수와 연산
# 포인터변수 예시3
#include <stdio.h>
void main()
{
int NUM = 98;
int* ptr;
ptr = &NUM;
NUM = NUM + 1; #NUM++;
printf("%d", num);
*ptr = *ptr + 1; #(*ptr)++;
printf("%d", *ptr);
}
풀이
10번지 | 1000번지 |
ptr | NUM |
- num = 98
- 'ptr = &num': ptr의 주소를 num의 주소로 바꿈
- ptr은 1000번지 즉, ptr의 값(*ptr)은 98
- 'NUM = NUM + 1': NUM의 값은 99
- NUM은 ptr이 가리키는 값(*ptr)이기 때문에 99
- '*ptr' = *ptr +1;': ptr의 값은 100
728x90
'자격증' 카테고리의 다른 글
[정보처리기사] 실기 기출문제(2023-2020) 풀이 Python (2) | 2024.04.22 |
---|---|
[자격증] SQLD 1과목 이론 요점 정리(데이터 모델링의이해, 데이터 모델과 SQL, 2024년 개정 ver) (1) | 2024.02.19 |
[정보처리기사] 유튜브 두목넷 정보처리기사 실기를 위한 C 특강(6강 배열) (0) | 2024.02.17 |
[정보처리기사] 유튜브 두목넷 정보처리기사 실기를 위한 C 특강(5강 제어문-반복구조) (0) | 2024.02.15 |
[정보처리기사] 유튜브 두목넷 정보처리기사 실기를 위한 C 특강(4강 제어문-선택구조) (0) | 2024.02.14 |