본문 바로가기

개발/C&C++

(C/C++ 속성 정리) 10일 차 : 포인터 심화 및 2차원 배열

안녕하세요 넬다이입니다.

 

오늘은 포인터 심화 내용 및 2차원 배열을 배워보도록 하겠습니다.

 

오늘 정리는 짧게 구성되어있으며 보시고 익숙해지시면 복습하는 시간을 가져보는 것도 나쁘지 않을 것 같습니다.

 


포인터 심화 내용

정수형 변수에 +1을 한다면 단순 1이 증가하게 된다.

 

하지만 포인터 변수에 +1을 한다면 해당 포인터 변수가 지시하는 데이터 타입의 바이트 크기만큼 이 증가하게 된다.

 

short 형 포인터 변수에 1을 더하면 2바이트만큼 증가하고
double 형 포인터 변수에 1을 더하면 8바이트가 증가하게 되는 것입니다.

 

포인터 변수의 값은 주소 값이며 증감 연산도 가능했다.
다른 주소를 가리키도록 변경도 가능했다.
포인터 변수도 인덱스 첨자를 이용한 임의 접근도 가능하다.

 

배열의 이름은 배열의 시작 주소이지만 다른 주소를 가리키도록 할 수 없다.
증감 연산 불가하며 인덱스 첨자는 웬만하면 양수로 갑시다.

int 	iArray[10] = {0};
int*	pArray = iArray; //== &iArray[0]; // &iArray[0]과 같은뜻이다

cout << pArray[3] << endl;

 

위 내용으로 보면은 int* pArray = iArray라고 저장을 하고 있다.

그런데 iArray는 배열 주소의 첫 주소이기 때문에 iArray [0]의 값에 &(주소)를 넣어서

&iArray [0] 번의 주소를 넣는 것과 같은 효과를 갖는다.

 

int 	iArray[10] = {0};
int*	pArray = iArray; //== &iArray[0]; // 이거 같은거야..

cout << pArray[3] << endl;

pArray[0] = 0;
pArray[1] = 1;
pArray[2] = 2;

*pArray = 0;
*(pArray + 1) = 1;
*(pArray + 2) = 2;

cout << sizeof(iArray) << endl;

 

위에 코드에서 보다시피 아까 포인터 변수에 +1을 하게 되면 어떤 동작을 취해지는지를 말했다.

 

이처럼 위에 형식처럼 *(pArray +1) = 1은 pArray [1] = 1과 같은 형태를 취하고 있다.

 

위와 아래의 연산은 C++ 상에서는 동일한 연산이기 때문이며 배열의 경우에는 sizeof() 연산자 사용 시
배열의 전체 크기가 (바이트 단위) 반환된다.

 

	//1차원배열
	int iArray[25] = {0};

	for(int i = 0; i < 25; ++i)
	{
		iArray[i] = i + 1;
	}

	for(int i = 0; i < 25; ++i)
	{
		cout << iArray[i] << "\t";
		if((i + 1) % 5 == 0)
			cout << endl;
	}

	cout << "=======================" << endl;

	//2차원배열
	int	iArray2[5][5] = {0};

	for(int i = 0; i < 5; ++i)
	{
		for(int j = 0; j < 5; ++j)
		{
			iArray2[i][j] = j + 1 + (5 * i);
		}
	}

	for(int i = 0; i < 5; ++i)
	{
		for(int j = 0; j < 5; ++j)
		{
			cout << iArray2[i][j] << "\t";

			/*if((iArray2[i][j] % 5) == 0)
				cout << endl;*/
		}
		cout << endl;
	}

 

간단하게 사용하는 법을 적어놓은 것이며

위 1차원 배열과 아래 2차원 배열의 출력물은 같다.