JUST GO

[C] 포인터(2) 본문

C/학습내용

[C] 포인터(2)

root_go 2022. 10. 6. 09:07

배열에 대한 포인터의 선언 및 사용

#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