JUST GO
[C] 포인터(2) 본문
배열에 대한 포인터의 선언 및 사용
#include<iostream>
int main(void) {
int data[3][5] = {
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15}
};
int(*p)[5] = &data[0]; // int[5] 배열에 대한 포인터
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 5; j++)
printf("%2d ", p[i][j]); // 2차원 배열인 것처럼 사용한다.
// p[i][j], (*(p+i))[j], *(p[i]+j), data[i][j] 같은 결과
printf("\n");
}
return 0;
}
/*
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
*/
int data[3][5] = {
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}
};
int (*p)[5] = &data[0];
int (*p)[5] = &data[0][0];
int (*p)[5] = data;
&data[0] == &data[0][0] = data
&data[1] == &data[1][0]
&data[2] == &data[2][0]
{00, 01, 02, 03, 04},
{10, 11, 12, 13, 14},
{20, 21, 22, 23, 24}
#include<iostream>
int main(void)
{
int a[3][2] = { {1,2},{3,4},{5,6} }; // 2차배열 선언과 값의 초기화
printf("a[0] : %p \n", a[0]);
printf("a[0+0]: %p \n", *(a + 0));
printf("a[1] : %p \n", a[1]);
printf("*(a+1): %p \n", *(a + 1));
printf("a[2] : %p \n", a[2]);
printf("*(a+2): %p \n", *(a+2));
printf(" %d, %d \n", a[2][1], (*(a + 2))[1]);
printf(" %d, %d \n", a[2][1], *(a[2] + 1));
printf(" %d, %d \n", a[2][1], *(*(a + 2)+1));
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
printf(" %d ", a[i][j]);
}
printf("\n");
}
return 0;
}
// a[0] : 003EF7D0
// a[0+0]: 003EF7D0
// 주소가 같음
// a[1] : 003EF7D8
// *(a+1): 003EF7D8
// 주소가 같음
// a[2] : 003EF7E0
// *(a+2): 003EF7E0
// 주소가 같음
// 6, 6
// 6, 6
// 6, 6
// 1 2
// 3 4
// 5 6
'C > 학습내용' 카테고리의 다른 글
[C] swap 함수 (0) | 2022.10.07 |
---|---|
[C] 배열 (0) | 2022.10.06 |
[C] 함수 (0) | 2022.10.06 |
[C] 반복문(2) (1) | 2022.10.05 |
[C] 반복문 (1) | 2022.10.05 |