|
sizeof()는 해당 내용물의 크기를 구하게 되어 있는데.
이 함수 안에 포인터 변수를 넣는 경우 많이 오해합니다.
아래 소스에서
sizeof(monthName) 는
포인터 monthName의 크기를 나타냅니다.
포인터가 얼마나 큰 메모리의 값을 가리키던간에 포인터의 크기는 정해져(보통 8bit) 있습니다.
실질적으로 해당 시스템에서 지원하는 포인터 주소의 크기가 반환되지요.
포인터는 단지 대상을 가리키는 주소이기 때문입니다.
그래서 1이 나오는게 정상입니다.
앙탈쟁이 님이 쓰신 글 :
: #include <iostream>
: #include <string>
:
: int main()
: {
: using namespace std;
: string monthName[12] = {"1","2","3","4","5","6","7","8","9","10","11","12"};
: int monthSelling[3][sizeof(monthName)];
: int totalSelling = 0;
:
: for (int i = 0; i < 3; i++)
: {
: cout << i + 1 << "년째\n";
: for (int j = 0; j < sizeof(monthName); j++)
: {
: cout << monthName[j] << "판매량 ";
: cin >> monthSelling[i][j];
: totalSelling = totalSelling + monthSelling[i][j];
: }
: cout << endl;
: }
: cout << totalSelling << endl;
: return 0;
: }
:
:
: 이런 내용의 코드가 있는데 i의 for문이 1회만 돌고 안도네요.
: 내부 for문의 j < sizeof(monthName) 이 부분을 12와 같은 상수로 바꾸어주니 3번 * 12번 해서 36번이 도는데
: j < sizeof(monthName) 로 두었을 경우 12번만 수행을 하고 (i = 0일때만 수행) 끝나버립니다
: 왜 그런 차이가 발생하는 것인지 알 수 있을까요?
|