2차원 배열과 포인터
int a[3][2] = {{1,2}, {3,4}, {5,6}};
printf("%d\n", a); // a에는 2차원 배열의 대표 주소가 들어있다
printf("%d\n", *a); // *a는 2차원 배열 1행의 대표 주소를 가리킨다
printf("%d\n", **a); // **a는 1행1열의 값을 가리킨다
연습문제
#incldue <stdio.h>
int main() {
int data[][3] = {1, 3, 4, 5, 2, 9, 6, 8, 7}; // 3개씩 끊겠다
int *p = data[1]; // p에는 data 배열 2행의 주소가 들어있음
int x, y;
x = *p; // x = 5
y = *(p + 2); // y = 9
printf("x=%d, y=%d\n", x, y); // 5, 9
}
아래 헷갈림 주의!
https://chatgpt.com/share/6700ec6f-56ec-8001-b92f-7c47d7263d8c
#include <stdio.h>
int main() {
int darr[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
int sum1, sum2;
sum1 = *(*darr+1) + *(*darr+2); // sum1 = 5
sum2 = *darr[1] + *darr[2]; // sum2 = 11
printf("%d, %d", sum1, sum2);
}
// sum1 처럼 계산하면 1열씩 이동하고
// sum2 처럼 계사하면 1행씩 이동한다
포인터 배열
배열의 요소가 포인터(메모리 주소)로 이루어진 것, 배열 각 원소의 주소값을 원소로 가지고 있는 배열
#include <stdio.h>
int main() {
static char *c[] = {"aaa", "bbb", "ccc"}; // 여기서 static은 큰 의미는 없음, 메모리상 어느 위치에 aaa, bbb, ccc가 저장이 될 것이고, 각 주소값을 원소로 가지는 배열이 c이다.
printf("%s", *(c+1)); // bbb
}
#include <stdio.h>
int main() {
char *array1[2] = {"Good morning", "C language"}; // 포인터 배열 -> 주소값을 원소로 가짐
printf("%s\n", array1[0]+5); // 문자열 출력 -> 주소값을 인자로 받음, 주소값부터 \0(널문자)를 만날때까지 모든 원소 출력
printf("%c\n", *(array1[1]+6)); // 값은 전달 받고, 글자 하나 출력
}
// morning
// u
#include <stdio.h>
void main() {
int a[2][3] = {{-3, 14, 5}, {1, -10, 8}};
int *b[] = {a[0], a[1]};
int *p = b[1];
printf("%d", *b[1]); // 1, b[1] 이 가리키는 공간의 있는 값
printf("%d", *(++p)); // -10
printf("%d", *(--p-2)); // 14
}
#include <stdio.h>
int main() {
int *arr[3];
int a = 12, b = 24, c = 36;
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
printf("%d\n", *arr[1] + **arr + 1); // 24 + 12 + 1 = 37
}
// arr[1]이 가리키는 값 + arr이 가리키는 값(a의 주소)이 가리키는 값(12) + 1
'정보처리기사' 카테고리의 다른 글
[정보처리기사] C언어 특강 37~48강 정리(함수에 주소전달) (0) | 2024.10.06 |
---|---|
[정보처리기사] C언어 특강 35~36강 정리(구조체, 배열포인터) (0) | 2024.10.06 |
[정보처리기사] C언어 특강 23~28강 정리(포인터) (0) | 2024.10.04 |
[정보처리기사] C언어 특강 21~22강 정리(배열) (0) | 2024.10.04 |
[정보처리기사] C언어 특강 18 ~ 1강 정리(복잡한 제어문, 반복문 ) (0) | 2024.10.03 |