2017-12-04 14 views
-2

배열의 크기를 동적으로 찾으려고 시도합니다. main()에서 크기를 가져 오는 것은 정상적으로 작동하지만 GetSize 함수에 전달할 때는 그렇지 않습니다.문자열 배열의 C++ sizeof가 함수에 전달 될 때 예상 결과를 반환하지 않음

#include <iostream> 
#include <string> 

using namespace std; 

string GetSize(string array[]); 

int main() 
{ 
    string array[] = {"A", "B", "C", "D", "E"}; 
    int ARRAY_SIZE = (sizeof(array)/sizeof(array[0])); 

    cout << "Total Size: " << sizeof(array) << endl; 
    cout << "Single Element Size: " << sizeof(array[0]) << endl; 

    // Pass the array as an argument to GetSize() 
    GetSize(array); 
} 

string GetSize(string array[]) 
{ 
    // Get size of the array 
    int ARRAY_SIZE = (sizeof(array)/sizeof(array[0])); 

    cout << "Size of array is: " << sizeof(array) << endl; 
    cout << "Size of 1st element is: " << sizeof(array[0]);  
} 

출력

// Total Size: 160 
// Single Element Size: 32 
// Size of array is: 8 
// Size of 1st element is: 32 

내가 단서가 없다 왜 총 크기와 배열의 크기 사이의 차이.

REPL 샌드 박스 :https://repl.it/@phreelyfe/Size-Of-Error

+1

확실히이 하나의 약간의 중복이의 string[5]의 크기입니다. – drescherjm

+0

나는 한시간 이상 stackoverflow를 검색했습니다. – 4UmNinja

+0

C++ (C 유산)에서 배열은 섬세한 비누 방울이 며 모자 한 방울로 포인터가됩니다. C++에서는 대신'std :: vector'를 사용하고 배열의 문제를 피하십시오. – Eljay

답변

1

무엇

template <typename T, std::size_t N> 
constexpr std::size_t getArrSize (const T(&)[N]) 
{ return N; } 

어떻습니까?

의미 : 서로 다른 크기의 다양한 배열은 서로 다른 유형입니다.

들어오는 인수의 크기를 명시해야합니다.

당신이 포인터의 크기 sizeof(array)를 얻을 수 있도록

string GetSize(string array[]) 

컴파일러가하는 string * arraystring array[]을 고려 쓸 때 (8). main()sizeof(array)에서

그래서 160

+2

이것은 "전체 크기와 배열 크기 사이의 불일치"를 설명하지 않습니다. –

+0

이것은 확실히 작동합니다! 이 포인터/참조 문제를 해결하는 방법을 찾을 수있을 때까지 대답으로 표시하는 것을 주저합니다. 나는 이것을 지금 tho에 사용할 것이다. 고마워! – 4UmNinja

+1

@ 4UmNinja - 답변 향상; 이 도움이되기를 바랍니다 – max66