반응형
기본 포인터
#include <stdio.h>
int main() {
int value = 10; // value 10
int *ptr; // ptr 선언
ptr = &value; // ptr은 value의 주소를 가르킨다.
printf("value: %d \n", value); // value 값인 10을 출력
printf("ptr 값: %d \n", ptr); // ptr의 주소값 출력
printf("ptr 의 값: %d \n", *ptr); // ptr이 가르키고 있는 value의 값인 10 출력
*ptr = 20; // ptr이 가르키고 있는 값을 수정한다.
printf("value: %d \n", value); // 20 출력
return 0;
}
#include <stdio.h>
int main() {
int numbers[] = {10, 20, 30, 40, 50 }; // 배열 numbers 선언
int *ptr = numbers+1; // 배열은 기본적으로 주소값을 가지고있음 주소값 +1
printf("%d \n", *ptr); // 20 출력
for (int i = 0; i < 5; i++) {
printf("numbers[%d] = %d \n", i, *(ptr + i)); // 20부터 순차적 출력, 루프 5번 째는 쓰레기 값
}
*(ptr + 2) = 35; // ptr + 2의 주소 = 103임, 40을 35로 수정
for (int i = 0; i < 5; i++) {
printf("numbers[%d] = %d \n", i, numbers[i]); // 10, 20, 30, 35, 50 출력
}
return 0;
}
#include <stdio.h>
int main() {
int code[] = {10, 20, 30 }; // code 배열 선언
int *p = code; // p는 code의 주소를 가르킴
printf("%d \n", *(p++)); // 후위증감 연산자, 10을 출력후 주소값 + 1
printf("%d \n", *p); // 20 출력
printf("%d \n", *(++p)); // 전위증감 연산자, 30 출력
printf("%d \n", *p); // 30 출력
return 0;
}
#include <stdio.h>
int main() {
int code[] = {10, 20, 30 };
int *p = code;
printf("%d \n", *p++); // 10을 출력 후, 주소값을 1 증감한다,
printf("%d \n", *p); // 20 출력
printf("%d \n", (*p)++); // 20을 출력후 값에 1 증감한다.
printf("%d \n", *p); // 21 출력
return 0;
}
2차원 배열 접근
int darr[3][3] = { {1, 2, 3 }, {4, 5, 6 }, {7, 8, 9 } };
int a = *darr[0]; // darr[0][0]과 같다.
int b = *darr[1]; // darr[1][0]과 같다.
// 2차원 배열에서 아스트릭크로 값을 꺼내면 1차원 배열과 같다.
// darr을 기본주소값 (가상)100을 가지고 있다.
// *darr + 0 = 100번지, 100번지를의 값은 1
int c = *(*darr + 0);
int d = *(*darr + 1); // *darr + 1 = 101번지, *(101번지)의 값 = 2
#include <stdio.h>
int main() {
int darr[3][3] = { {1, 2, 3 }, {4, 5, 6 }, {7, 8, 9 } };
int sum1;
sum1 = *darr[0] + *darr[1] + *darr[2]; // 각 행의 주소의 값을 더 한다. 1, 4, 7
int sum2;
sum2 = *(*darr + 0) + *(*darr + 1) + *(*darr + 2); // 100번지, 100번지+1, 100번지 +2의 값들을 더한다.
// 1, 2, 3
printf("SUM1: %d \n", sum1); 12 출력
printf("SUM2: %d \n", sum2); 6 출력
return 0;
}
포인터 배열
배열의 요소가 포인터(메모리주소)로 이루어진것
// 포인터 배열
int a = 10, b = 20, c = 30;
int d = &a , e = &b , f = & c
// 배열의 각각의 요소는 주소를 가르킨다.
int *ptrArr[3] {&a, &b, &c};
// 포인터 변수인 경우 &연산자 필요없음, (d, e, f) 자체가 주소를 가르키고 있음
int *ptrArr[3] {a, b, c};
char *array[2] {"good morning", "C language"};
printf("%s\n", array[0] + 5); // array 의 첫번 째 요소의 주소+5 부터 null 문자를 만날때 까지 출력, morning;
printf("%s\n", array[1] + 6);// array의 두번 째 요소의 주소+6의 한글자 출력
100 + 5 = 'm'의 문자 부터 null 까지 출력, morning,
200 + 6 = 'u' 문자 한 글자 출력
'정보처리기사' 카테고리의 다른 글
정보처리기사 Python 문법 정리 (2) | 2025.04.11 |
---|