[英]find sizeof char array C++
我試圖在其初始化的不同函數中獲取sizeof char數組變量但是無法獲得正確的sizeof。 請看下面的代碼
int foo(uint8 *buffer){
cout <<"sizeof: "<< sizeof(buffer) <<endl;
}
int main()
{
uint8 txbuffer[13]={0};
uint8 uibuffer[4] = "abc";
uint8 rxbuffer[4] = "def";
uint8 l[2]="g";
int index = 1;
foo(txbuffer);
cout <<"sizeof after foo(): " <<sizeof(txbuffer) <<endl;
return 0;
}
輸出是:
sizeof: 4
sizeof after foo(): 13
期望的輸出是:
sizeof: 13
sizeof after foo(): 13
僅使用指針無法完成此操作。 指針不包含有關數組大小的信息 - 它們只是一個內存地址。 因為數組在傳遞給函數時會衰減為指針,所以會丟失數組的大小。
然而,一種方法是使用模板:
template <typename T, size_t N>
size_t foo(const T (&buffer)[N])
{
cout << "size: " << N << endl;
return N;
}
然后你可以像這樣調用函數(就像任何其他函數一樣):
int main()
{
char a[42];
int b[100];
short c[77];
foo(a);
foo(b);
foo(c);
}
輸出:
size: 42
size: 100
size: 77
你不能。 在foo中,你要求的是“uint8_t指針”的大小。 如果您需要在foo中將大小作為單獨的參數傳遞。
一些模板魔法:
template<typename T, size_t size>
size_t getSize(T (& const)[ size ])
{
std::cout << "Size: " << size << "\n";
return size;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.