일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- C++
- C언어 포인터
- 플러터
- vim
- jupyter
- C# delegate
- c# winform
- 깃
- 다트 언어
- HTML
- github
- Unity
- 도커
- git
- 유니티
- 구조체
- c# 윈폼
- Python
- c# 추상 클래스
- docker
- Flutter
- jupyter lab
- Algorithm
- c#
- Data Structure
- 포인터
- gitlab
- Houdini
- c언어
- dart 언어
Archives
- Today
- Total
nomad-programmer
[Programming/C] 다차원 배열의 주소를 저장하는 포인터를 이용한 배열의 접근 응용 본문
다음은 9 X 9 배열을 포인터 변수 int (*arr)[3][3]에 저장하여 메모리에 사용하는 응용 예제이다.
#include <stdio.h>
#include <string.h>
typedef int (*ARR9)[9];
typedef int (*ARR33)[3][3];
// int (*arr)[9]
void PrintArray(ARR9 arr){
for(int i=0; i<9; i++){
for(int j=0; j<9; j++){
printf("%2d", arr[i][j]);
}
puts("");
}
puts("===============================");
}
int main(int argc, const char * argv[]) {
int arr[9][9];
ARR33 arr33;
memset(arr, 0, sizeof(int) * 9 * 9);
PrintArray(arr);
// int (*arr)[3][3]
arr33 = (ARR33)arr;
for(int i=0; i<9; i++){
for(int j=0; j<3; j++){
arr33[3][i][j] = 1;
}
}
PrintArray(arr);
for(int i=0; i<9; i++){
for(int j=0; j<3; j++){
arr33[i][1][j] = 1;
}
}
PrintArray(arr);
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
arr33[3+i][1][j] = 5;
}
}
PrintArray(arr);
return 0;
}
/* 결과
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
===============================
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
===============================
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
===============================
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
1 1 1 5 5 5 1 1 1
1 1 1 5 5 5 1 1 1
1 1 1 5 5 5 1 1 1
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 1 1 1 0 0 0
===============================
*/
ARR33이라는 이름은 3차원 주소의 역할을 하여 +1을 할 때, [3][3]의 행과 열을 건너뛰는 포인터 변수를 만들기 위한 형 재정의 이름이다. ARR9 이라는 이름은 2차원 주소의 역할을 하여 +1을 할 때 [9]의 열을 건너뛰는 포인터 변수를 만들기 위한 형 재정의 이름이다.
memset() 함수를 사용하여 9 X 9 메모리를 모두 0으로 초기화한다.
arr33[i][1][j] = 1 문장은 i(0~8)가 1씩 증가할 때 int형 3 X 3(9개) 만큼 건너뛰고 j(0~2)가 1씩 증가할 때 int형 1개씩 건너뛴 메모리를 1로 만든다.
arr33[3][i][j] = 1 문장은 i가 1씩 증가할 때 int형 3개씩 건너뛰고 메모리를 j가 1씩 증가할 때 int형 1개씩 건너뛴 메모리를 1로 만든다.
arr33[3+i][1][j] = 5 문장은 i가 1씩 증가할 때 int형 3 X 3(9개) 만큼 건너뛰고 j가 1씩 증가할 때 int형 1개씩 건너뛴 메모리를 5로 만든다.
'Programming > C' 카테고리의 다른 글
[Programming/C] 비트 단위로 제어하기 (Struct Bit Field 활용) (0) | 2021.01.22 |
---|---|
[Programming/C] 문자열 추가, 삭제, 출력, 정렬 간단한 예제 (0) | 2021.01.21 |
[Programming/C] 매크로 함수와 shift bit 연산을 이용한 정수 결합 (0) | 2021.01.20 |
[Programming/C] XOR(^)를 이용한 데이터 교환 (0) | 2021.01.20 |
[Programming/C] printf() 함수와 비슷한 가변인자 함수 만들기 (0) | 2021.01.17 |
Comments