티스토리 뷰

배열의 이름은 0번 요소의 주소이며, 전체 배열을 대표하는 식별자입니다. 그리고 포인터 변수는 주소를 저장하기 위한 변수입니다. 

 

이 점을 이용해 알아낼 수 있는 것은 "배열의 이름이 주소이므로, 포인터 변수에 저장할 수 있다"입니다.

#include<stdio.h>

int main(void) {
	//int 배열 선언 및 정의. 배열의 이름은 연속된 각 요소들 중 전체를 대표하는 0번째 요소에 대한 '주소 상수'이다.
	int aList[5] = { 0 };
	
	//int에 대한 포인터 변수를 배열의 이름으로 정의
	int* pnData = aList; // int* pnData = &aList[0];과 같다고도 볼 수 있다.

	printf("aList[0] : %d\n", aList[0]);

	//포인터가 가리키고 있는 배열의 0번 요소의 값을 변경하고 출력한다.
	*pnData = 20; // aList[0] = 20;과 같다고 볼 수 있다.
	printf("aList[0] : %d\n", aList[0]);

	return 0;
}

 

이것을 좀 더 응용한다면, pnData = &aList[1]; || pnData = &aList[2]; 같은 코드도 성립합니다.

 

*(pnData + 0)을 다른 코드로 표시하면 정확히 pnData[0]입니다.

 

또한 *(pnData + 0) 코드를 해석하면, 포인터 변수 pnData에 저장된 주소를 기준으로 오른쪽으로 int 0개 떨어진 위치(주소)의 메모리를 int형 변수로 지정한다는 것입니다.

 

즉, 어떤 기준을 중심으로 상대적으로 말한 것입니다.

 

#include<stdio.h>

int main(void) {
	char szBuffer[16] = { "Hello" };
	char* pnData = szBuffer; // pnData에 szBuffer 배열의 주소를 저장.

	*(pnData + 2) = 'a'; // 포인터 변수를 이용해 szBuffer[2] = 'a'와 동일한 코드를 수행
	printf("%c", pnData[1]); // pnData를 프린트할시 szBuffer의 주소가 저장되있므로 해당 주소의 값 출력.
	for (int i = 0; i < 5; i++)
		printf("%c", szBuffer[i]);
	return 0;
}

 

포인터 변수를 이용한 문자열의 길이를 알아내는 방법

#include<stdio.h>

int main(void) {
	char szBuffer[16] = { "Hello" };
	char* pnData = szBuffer; // pnData에 szBuffer 배열의 주소를 저장.	

	// 문자열의 길이를 측정하기 위해 NULL 문자가 저장된 위치를 찾아낸다.
	while (*pnData != '\0')
	{
		pnData++;
	}
	printf("%d", pnData - szBuffer);
	return 0;
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함