본문으로 바로가기

C언어 공부정리2(배열의 주소값)

category C언어/C 2020. 11. 24. 14:22

1. 선언한 것을 기준으로 [], *갯수가 부족 -> address
  선언한 것을 기준으로 [], *갯수가 동일 -> value
2. 선언한 것을 기준으로 [], *의 갯수가 1개 부족 -> 1차원 주소
  선언한 것을 기준으로 [], *의 갯수가 2개 부족 -> 2차원 주소
  선언한 것을 기준으로 [], *의 갯수가 3개 부족 -> 3차원 주소
*3. 주소연산
  1차원 주소 + 1 -> 1은 한 요소의 사이즈
  2차원 주소 + 1 -> 한 행의 사이즈
  3차원 주소 + 1 -> 한 면의 사이즈

int a[2][2] 
&a[0][0] + 1 -> a[0][1] 
a + 1 -> a[1][0] 


포인터 : 메모리의 주소값을 저장하는 변수
  배열([])과 포인터(*)는 둘다 주소값을 가지고 있기 때문에 호환 가능함(의미는 바뀌지 않는다.)

void a(int aa[10]){} // aa는 포인터이다. 배열이 아니다. 

 

 

3차원 배열 주소값 구하기

 : 그래프

8 7 6 5 4 3 2 1
&arr[0][0][0] &arr[0][0][1] &arr[0][1][0] &arr[0][1][1] &arr[1][0][0] &arr[1][0][1] &arr[1][1][0] &arr[1][1][1]
arr[0][0] arr[0][0]+1 arr[0][1] arr[0][1]+1 arr[1][0] arr[1][0]+1 arr[1][1] arr[1][1]+1
arr[0] - arr[0]+1 - arr[1] - arr[1]+1 -
arr - - - arr + 1 - - -
*arr - *arr+1 - *(arr+1) - *(arr+1)+1 -
*arr[0] *arr[0]+1 *(arr[0]+1) *(arr[0]+1)+1 *arr[1] *arr[1]+1 *(arr[1]+1) *(arr[1]+1)+1
**arr **arr+1 *(*arr+1) *(*arr+1)+1 **(arr+1) **(arr+1)+1 *(*(a+1)+1) *(*(a+1)+1)+1

 : 코드

#include<stdio.h>

int main() 
{
	int arr[2][2][2] = { 8, 7, 6, 5, 4, 3, 2, 1 };
	// 8
	printf("【 arr[0][0][0] : 8 = ");
	printf("%p 】\n", &arr[0][0][0]);

	printf("%p\t", arr[0][0]);
	printf("%p\t", arr[0]);
	printf("%p\t", arr);
	printf("%p\t", *arr);
	printf("%p\t", *arr[0]);
	printf("%p\t", **arr);

	printf("\n\n");

	// 7
	printf("【 arr[0][0][1] : 7 = ");
	printf("%p 】\n", &arr[0][0][1]);

	printf("%p\t", arr[0][0] + 1);
	printf("%p\t", *arr[0]+1);
	printf("%p\t", **arr + 1);
	

	printf("\n\n");
	printf("\n\n");

	// 6
	printf("【 arr[0][1][0] : 6 = ");
	printf("%p 】\n", &arr[0][1][0]);

	printf("%p\t", arr[0][1]);
	printf("%p\t", arr[0] + 1);
	printf("%p\t", *arr + 1);
	printf("%p\t", *(arr[0]+1));
	printf("%p\t", *(*arr+1));

	printf("\n\n");

	// 5
	printf("【 arr[0][1][1] : 5 = ");
	printf("%p 】\n", &arr[0][1][1]);

	printf("%p\t", arr[0][1] + 1);
	printf("%p\t", *(arr[0] + 1) + 1);
	printf("%p\t", *(*arr + 1) + 1);

	printf("\n\n");
	printf("\n\n");
	printf("\n\n");

	// 4
	printf("【 arr[1][0][0] : 4 = ");
	printf("%p 】\n", &arr[1][0][0]);
	
	printf("%p\t", arr[1][0]);
	printf("%p\t", arr[1]);
	printf("%p\t", arr + 1);
	printf("%p\t", *(arr + 1));
	printf("%p\t", *arr[1]);
	printf("%p\t", **(arr + 1));

	printf("\n\n");

	// 3
	printf("【 arr[1][0][1] : 3 = ");
	printf("%p 】\n", &arr[1][0][1]);

	printf("%p\t", arr[1][0] + 1);
	printf("%p\t", *arr[1] + 1);
	printf("%p\t", **(arr + 1) + 1);

	printf("\n\n");
	printf("\n\n");

	// 2
	printf("【 arr[1][1][0] : 2 = ");
	printf("%p 】\n", &arr[1][1][0]);

	printf("%p\t", arr[1][1]);
	printf("%p\t", arr[1] + 1);
	printf("%p\t", *(arr + 1) + 1);
	printf("%p\t", *(arr[1] + 1));
	printf("%p\t", *(*(arr + 1) + 1));

	printf("\n\n");

	// 1
	printf("【 arr[1][1][1] : 1 = ");
	printf("%p 】\n", &arr[1][1][1]);

	printf("%p\t", arr[1][1] + 1);
	printf("%p\t", *(arr[1] + 1) + 1);
	printf("%p\t", *(*(arr + 1) + 1) + 1);

	printf("\n\n");

}

 

 

반응형

'C언어 > C' 카테고리의 다른 글

C언어 공부 정리6(동적 메모리)  (0) 2020.11.30
C언어 공부 정리5(구조체)  (0) 2020.11.27
C언어 공부 정리4(다차원 포인터)  (0) 2020.11.26
C언어 공부정리3(포인터)  (0) 2020.11.25
C언어 공부 정리1  (0) 2020.11.23