Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 인프런
- DP
- Cleancode
- 따라하면서 배우는 C언어
- BASIC
- 정수론
- 생활코딩
- udemy
- 백준
- server
- Algorithm
- Algospot
- dfs
- greedy
- graph
- programmers
- BOJ
- 종만북
- Math
- C언어
- JavaScript
- 따라하며 배우는 C언어
- Python
- web
- sorting
- 따배씨
- String
- BFS
- php
- C
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 10.14 2차원 배열과 포인터 본문
따배씨 - 따라하며 배우는 C언어
10강 배열과 포인터
10.14 2차원 배열과 포인터
- 이차원 배열은 이중 포인터를 사용하여 표현 가능
#include <stdio.h>
int main(){
float arr2d[2][4] = {{1.0f, 2.0f, 3.0f, 4.0f}, {5.0f, 6.0f, 7.0f, 8.0f}};
printf("%u\n", (unsigned)arr2d);
// 4022334480
printf("%u\n", (unsigned)arr2d[0]);
// 4022334480
printf("%u\n", (unsigned)& arr2d[0]);
// 4022334480
printf("\n");
printf("%u\n", (unsigned)* arr2d);
// 4022334480
printf("%u\n", (unsigned)& arr2d[0]);
// 4022334480
printf("%u\n", (unsigned)& arr2d[0][0]);
// 4022334480
printf("%f %f\n", arr2d[0][0], **arr2d);
// 1.000000 1.000000
printf("\n");
printf("%u\n", (unsigned) (arr2d + 1));
// 4022334496
printf("%u\n", (unsigned) (&arr2d[1]));
// 4022334496
printf("%u\n", (unsigned) (arr2d[1]));
// 4022334496
printf("%u\n", (unsigned) (*(arr2d + 1)));
// 4022334496
printf("%u\n", (unsigned) (&arr2d[0] + 1));
// 4022334496
printf("%u\n", (unsigned) (&arr2d[1][0]));
// 4022334496
printf("\n");
return 0;
}
#include <stdio.h>
int main(){
float arr2d[2][4] = {{1.0f, 2.0f, 3.0f, 4.0f}, {5.0f, 6.0f, 7.0f, 8.0f}};
for (int j = 0; j < 2; ++j){
printf("[%d] = %u, %u\n", j, (unsigned)(arr2d[j]), (unsigned) * (arr2d + j));
for (int i = 0; i < 4; ++i){
printf("[%d][%d] = %f, %f\n", j, i, arr2d[j][i], *(*(arr2d + j)+i));
*(*(arr2d + j)+i) += 1.0f; // arr2d[j][i] += 1.0f;
}
}
printf("\n");
// [0] = 4022334480, 4022334480
// [0][0] = 1.000000, 1.000000
// [0][1] = 2.000000, 2.000000
// [0][2] = 3.000000, 3.000000
// [0][3] = 4.000000, 4.000000
// [1] = 4022334496, 4022334496
// [1][0] = 5.000000, 5.000000
// [1][1] = 6.000000, 6.000000
// [1][2] = 7.000000, 7.000000
// [1][3] = 8.000000, 8.000000
return 0;
}
#include <stdio.h>
int main(){
float arr2d[2][4] = {{1.0f, 2.0f, 3.0f, 4.0f}, {5.0f, 6.0f, 7.0f, 8.0f}};
float (*pa)[4]; // 길이가 4인 배열에 대한 포인터
float* ap[2]; // 2개의 포인터를 원소로 가지는 배열
printf("%zu\n", sizeof(pa)); // 8 in x64
printf("%zu\n", sizeof(ap)); // 16 in x64
printf("\n");
pa = arr2d;
//pa[0] = arr2d[0]; // error
//pa[1] = arr2d[0]; // error
//ap = arr2d; // error
ap[0] = arr2d[0];
ap[1] = arr2d[1];
printf("%u %u\n", (unsigned)pa, (unsigned)(pa + 1));
// 4022334480 4022334496
printf("%u %u\n", (unsigned)arr2d[0], (unsigned)arr2d[1]);
// 4022334480 4022334496
printf("%u %u\n", (unsigned)pa[0], (unsigned)(pa[0] + 1));
// 4022334480 4022334496
printf("%f\n", pa[0][0]);
// 1.000000
printf("%f\n", *pa[0]);
// 1.000000
printf("%f\n", **pa);
// 1.000000
printf("%f\n", pa[1][3]);
// 8.000000
printf("%f\n", *(*(pa + 1) + 3));
// 8.000000
printf("\n");
printf("%u %u\n", (unsigned)ap, (unsigned)(ap + 1));
// 4022334464 4022334472
printf("%u %u\n", (unsigned)arr2d[0], (unsigned)arr2d[1]);
// 4022334480 4022334496
printf("%u %u\n", (unsigned)ap[0], (unsigned)(ap[0] + 1));
// 4022334480 4022334484
printf("%f\n", ap[0][0]);
// 1.000000
printf("%f\n", *ap[0]);
// 1.000000
printf("%f\n", **ap);
// 1.000000
printf("%f\n", pa[1][3]);
// 8.000000
printf("%f\n", *(*(ap + 1) + 3));
// 8.000000
printf("\n");
return 0;
}
printf("%u %u\n", (unsigned)ap, (unsigned)(ap + 1));
- ap 는 pointer 가 담기는 2차원 배열이기 때문에, 메모리 주소가 다름
- 새로 생성된 메모리 주소
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
http://www.inflearn.com/course/following-c
'Language > C' 카테고리의 다른 글
[따배씨] 10.16 다차원 배열을 함수에게 전달해 주는 방법 (0) | 2021.06.08 |
---|---|
[따배씨] 10.15 포인터의 호환성 (0) | 2021.06.07 |
[따배씨] 10.12 포인터에 대한 포인터 (2중 포인터) 의 작동 원리 ~ 10.13 포인터의 배열과 2차원 배열 (0) | 2021.06.06 |
[따배씨] 10.11 배열 매개변수와 const (0) | 2021.06.06 |
[따배씨] 10.10 const 와 배열과 포인터 (0) | 2021.06.06 |
Comments