본문 바로가기
Programming/C, C++

C++ 배열의 여러가지 사용 방법

by Dev_카페인 2022. 12. 7.
반응형

[C/C++] 배열의 여러가지 사용 방법

 

#include <stdio.h>
#include <typeinfo>

void TestArrNameAddress(int arr[])
{
	// 배열의 이름은 주소값을 넘겨줌,
	// 그래서 arr의 값을 변경하면 메인에 있던 값도 변경됨
	printf("%d\n", sizeof(arr));		// 포인터의 크기가 나옴
	printf("%s", typeid(arr).name());	// arr의 데이터 타입은 int * __ptr64

}

int main()
{
	// 여러가지 초기화 방법
	int arr1[5] = {};	// 크기5, 모두 0으로 초기화
	int arr2[5] = { 1, 2 };			// 크기5, 앞 2개는 1, 2를 가지고 나머지 3개는 0으로 초기화
	int arr3[5];		// 크기5, 쓰레기값 들어가 있음
	int arr4[] = { 1, 2, 3, 4, 5 };		// 크기5, 순차적으로 값 매김
	arr4[0] = 2;		// 직접적으로 넣어주기

	char arr5[5] = "LOVE";		// 'L', 'O', 'V', 'E', null
	char arr6[4] = "LOV";		// 문자 배열의 제일 마지막은 null문자(0)가 들어감	"LOVE"로 초기화 안됨
	arr6[3] = 'E';		// 출력시 "LOVE" 출력 후 null문자(숫자 0)을 만날 때 까지 (쓰레기값 포함)출력 됨

	TestArrNameAddress(arr1);		// 배열명은 주소값을 가지고 있다.
	int length = sizeof(arr1) / sizeof(int);	// 배열명의 크기를 확인하면 전체 크기를 알 수 있다. (데이터형의 크기 * 배열의 크기)
			// int는 64bit 컴파일러에서 4byte를 차지하고 있으므로 arr1[5] 는 4byte * 5 = 20의 크기를 갖는다.
			// 20 / 4byte = 배열의 크기
			// 위 방법을 매개변수로 전달해서 계산하면 안됨, 매개변수로 전달된 배열은 컴파일러가 크기를 가늠할 수 없다.
}

 

반응형