일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- HTML
- C언어 포인터
- gitlab
- dart 언어
- C++
- c# winform
- C# delegate
- Algorithm
- Python
- 깃
- Data Structure
- docker
- 유니티
- 다트 언어
- 구조체
- 포인터
- jupyter lab
- c언어
- c# 윈폼
- 플러터
- c# 추상 클래스
- vim
- github
- Unity
- Houdini
- 도커
- c#
- jupyter
- git
- Flutter
Archives
- Today
- Total
nomad-programmer
[C] 2차원 배열의 주소 값을 저장할 수 있는 포인터 본문
#include <stdio.h>
int main(void) {
char data[3][5] = { {0,}, {0,}, {0,} };
// 2차원 배열의 주소를 저장할 수 있는 포인터
char (*ptr)[5] = data;
/* char형 주소값 2개를 저장할 수 있는 배열 */
// char* ptr2[2] = { &data[0][0], &data[1][2] };
// 위의 코드와 같은 초기화 선언이다.
char* ptr2[2] = { &(*(*(data+0)+0)), &(*(*(data+1)+2)) };
// data[1][1]에 5저장
(*(ptr+1))[1] = 5;
// data[2][0]에 77저장
ptr[2][0] = 77;
// data[2][1]에 99저장
*(*(ptr + 2) + 1) = 99;
// ptr[0][0]에 55저장
*(ptr2[0]) = 55;
// ptr[2][1]에 100저장
*(*(ptr2+1)) = 100;
for (int i = 0; i < 15; i++) {
printf("%d ", data[i / 5][i % 5]);
if (!((i+1) % 5)) {
puts("");
}
}
return 0;
}
// 결과
/*
55 0 0 0 0
0 5 100 0 0
77 99 0 0 0
*/
1) char형 주소를 저장할 수 있는 배열의 선언.
char * ptr[3];
2) char형 2차원 배열의 주소를 저장할 수 있는 포인터.
char (*ptr)[3];
언뜻 보면, 서로 상당히 유사하다. 하지만 그 의미는 완전히 다르다.
1번째는 char형의 주소 값 3개를 저장할 수 있는 "포인터 배열" 이다.
2번째는 char형 데이터를 저장할 수 있는 열(row)의 크기가 3인 2차원 배열의 주소 값을 저장할 수 있는 "더블 포인터" 이다.
'Programming > C' 카테고리의 다른 글
[C] 동적 할당으로 간단히 구현해본 stack (0) | 2020.06.13 |
---|---|
[C] 동적 할당 (malloc, free) (0) | 2020.06.11 |
[C] int형 배열의 요소를 원하는 바이트만큼 변경 (0) | 2020.06.10 |
[C] atoi 함수 예제 (0) | 2020.06.10 |
[C] void 형 포인터 (0) | 2020.06.09 |
Comments