int main()
{
array<double,season> expense;
fill(&expense);
show(expense);
return 0;
}
void fill(array<double,season> *pa)
{
for(int i=0; i<season; i++)
{
cout<<sname[i]<<"에 소용되는 비용: ";
cin>>(*pa)[i];
}
}
array 객체의 예제소스를 공부하던중 궁금한 부분이 생겨서 질문드립니다
굵은색 부분의 cin>> (*pa)[i] 에서 (*pa) 부분이 왜 나오는지 잘 이해가 가질 않아 드리는 질문입니다.
pa는 포인터이고 expense라는 같은 타입의 객체의 주소를 전달받습니다.
그리고 cin에서 그걸 사용을 하는데 저는 포인터이니 pa[i] 라고 쓰여질줄 알았는데 (*pa)가 쓰이네요..
제가 왜 이렇게 생각하는지 예를들어 설명하자면
int arr[4];
int *ptr=arr;
cout<<ptr[0];
cout<<ptr[1];
.
.
.
이런식으로 포인터는 배열에서 사용하는 연산이 가능하고 배열도 포인터이니 그렇지 않습니까
그래서 저는 그런식으로 생각해서 cin>>pa[i] 이런식으로 될줄알았는데..왜 *pa가 나오는 것이지요?
타입이 arr<double,season> 으로 동일하니 그냥 쉽게생각해서 이 부분을 int형으로 바꿔생각하면 되는 문제인줄 알았는데
아니네요..어떻게 이해해야하나요
설레였지?
설레였어?
사실 array 원형을 몰라서 대답할수가 없엉 ㅜ
배열은 포인터인데, array는 배열이야?
물론 아니지. 그걸 배열로 쓰면 구성이 제대로 안된거지. array는 개체로 생각해야지
jj 형님 죄송한데 이해가 잘안갑니다..
array는 분명히 개체잖아? 개체면 개체인대로 써야지, 그게 배열처럼 생겼다고 배열처럼 쓰려고 하면 안되는 거 같아
흠. pa가 포인터니까 array 개체 expense의 주소를 가지고 있다가 *pa를 해서 개체 expense를 쓰는거잖아
예 형님
너 왜 쟤한테만 친절함
그럼 형님 저는 지금 array가 double 형으로 season 개 만큼 만들어내는건 맞지만 이걸 array객체라고 이해해야하지 double형 배열로 봐서 이런 현상이 일어난겁니까?
ㄴ 그런 것 같음
흑..
그럼 그것까지는 해결했다치면요 형님 *pa는 결국 expense를 나타내는건데 결국 expense도 객체이지 배열은 아니지 않습니까 (*pa)[i] 연산이 어떻게 가능한것이지요
ㄴㄴㄴ 나한테 하는 말이야? 이틀 있었던 거 같은데 벌써 알아봐주네
ㄴㄴ expense는 객체고 배열은 아닌데, C++에선 배열이 아니어도 [ ]를 연산자로 쓸 수 있어
아마도 array가 [ ]를 정의해뒀겠지. [i]를 하면 i번째 거를 가져오도록.
얼..그럼 만약에 i가 2라면 이 객체를 만들어 낼때 double형 seaon 개를 만들어냈는데 거기서 두번째꺼를 가져오라 이말이 되는건가요?
ㄴ 그러겠지? 저 분 말대로 array를 어떻게 만들었는지는 몰라서 정확하지는 않지만
답변 정말 감사합니다 형님 복받으세요
:-)