728x90
포인터를 활용한 배열 값의 증가 예제코드 설명
// C++ Example#6
#include <iostream>
using namespace std;
void addNum(int* i, int* j)
{
for (int* count = i; count < j; count++)
{
(*count)++;
}
}
void display(const int* i, const int* j)
{
for (const int* count = i; count < j; count++)
{
cout << *count << endl;
}
}
int main()
{
cout << "Who is HOO C++ Programming" << endl << endl;
int numbers[] = {1,2,3,4,5};
addNum(numbers, numbers + 5);
display(numbers, numbers + 5);
return 0;
}
실행결과
Who is HOO C++ Programming
2
3
4
5
6
Integer님의 C++ Example#6 변형 코드
#include <iostream>
using namespace std;
void addNum(int* i, int* j)
{
/*
for (int* count = i; count < j; count++)
{
(*count)++;
}
*/
int* count = i;
while (count < j)
{
(*count)++;
count++;
}
}
void display(const int* i, const int* j)
{
/*
for (const int* count = i; count < j; count++)
{
cout << *count << endl;
}
*/
const int* count = i;
while (count < j)
{
cout << *count << endl;
count++;
}
}
int main()
{
cout << "Who is HOO C++ Programming" << endl << endl;
int numbers[] = { 1,2,3,4,5 };
addNum(numbers, numbers + 5);
display(numbers, numbers + 5);
return 0;
}
//int* i 라던가 int* count=i 가 정확히 무슨 뜻을 가지는 거야???
실행결과
Who is HOO C++ Programming
2
3
4
5
6
Example Code 설명
//int* i 라던가 int* count=i 가 정확히 무슨 뜻을 가지는 거야???
C++ 포인터에서 *은 두가지 역할을 할 수 있습니다. 포인터를 선언하기도 하며 포인터의 역참조를 나타내는 역할을 합니다. 따라서 *가 나타내는 것이 pointer(=포인터)를 declare(=선언)한 것인지 아니면 dereference(=역참조)를 의미해서 변수나 주소값을 나타내고 있는지에 대해서 정확히 알고 있어야 합니다. 왜냐하면 역참조를 나타낸 것인데 포인터를 선언한 것으로 판단하고 있으면 완전히 다른 결과값이 산출될 수 있기 때문입니다.
int* i
우선 공백을 제외한 세번째 줄에 있는 int* i의 경우 int 타입의 i라는 포인터를 사용할 것이라는 것을 알려주고 있습니다. 따라서 앞으로 i는 포인터에 해당하며 *i의 경우 dereference로 사용될 수 있다는 걸 알 수 있습니다.
int*count=i
int*count=i는 "int*count=i는 int 타입을 가진 count라는 포인터를 사용하며 포인터 count는 i와 같다"라고 프로그래머가 코드를 통해 컴퓨터에게 알려주고 있다고 볼 수 있습니다. int*count=i를 통해서 count라는 포인터가 선언되었기에 *count를 통해 dereference를 하고 결과값인 배열의 값에 영향을 주게 됩니다.
728x90
댓글