C언어 - 2차원 배열과 포인터
2020. 11. 12. 14:19ㆍ개인공부/C언어
배열의 이름은 주소이다.( 첫번째 원소의 주소)
arr 이름이 a[0][0] 주소가 아니라 &arr[0] 이다.
arr[0]과 &arr[0]이 배열에서는 같다.
하지만 포인터의 배열에서는 달라진다.
#define _CRT_SECURE_NO_WARNINGS
#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);
printf("%u\n", (unsigned)arr2d[0]);
printf("\n");
// arr2d points to arr2d[0] (not arr2d[0][0])
//주소가 다 같다
printf("%u\n", (unsigned)* arr2d);
printf("%u\n", (unsigned)& arr2d[0]);
printf("%u\n", (unsigned)& arr2d[0][0]);
printf("%f %f\n", arr2d[0][0], **arr2d);
// 결과값 : 1.000000 1.000000
printf("\n");
// 모두 주소가 같다
printf("%u\n", (unsigned)(arr2d + 1)); // 16바이트를 건너뜀
printf("%u\n", (unsigned)(&arr2d[1]));
printf("%u\n", (unsigned)(arr2d[1]));
printf("%u\n", (unsigned)(*(arr2d + 1)));
printf("%u\n", (unsigned)(&arr2d[0] + 1));
printf("%u\n", (unsigned)(&arr2d[1][0]));
printf("\n");
printf("%f\n", *(*(arr2d + 1) + 2));
printf("\n");
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));
}
}
/*
[0] = 5240664, 5240664
[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] = 5240680, 5240680
[1][0] = 5.000000, 5.000000
[1][1] = 6.000000, 6.000000
[1][2] = 7.000000, 7.000000
[1][3] = 8.000000, 8.000000
*/
printf("\n");
return 0;
}
출처 : 홍정모의 따라배우는 C언어
'개인공부 > C언어' 카테고리의 다른 글
C언어 - 복합리터럴과 배열 ( Compound Literals ) (0) | 2020.11.12 |
---|---|
C언어 - 포인터의 호환성(Compatibility) (0) | 2020.11.12 |
C언어 - 포인터의 배열과 2차원 배열 (0) | 2020.11.12 |
C언어 - 포인터에 대한 포인터(2중 포인터)의 작동 원리 (0) | 2020.11.12 |
C언어 - 배열 매개변수와 const (0) | 2020.11.12 |