找到sizeof字符数组C++
问题描述:
即时通讯尝试获取sizeof char数组变量在一个不同的函数初始化,但不能得到正确的sizeof。请参阅下面的代码找到sizeof字符数组C++
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
答
你不能。在foo中,你要求的是“uint8_t指针”的大小。如果您在foo中需要,请将尺寸作为单独的参数传递。
答
这不能单用指针来完成。指针不包含有关数组大小的信息 - 它们只是一个内存地址。由于数组在传递给函数时衰减为指针,因此会丢失数组的大小。然而
一种方法是使用模板:
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
答
一些模板魔法:
template<typename T, size_t size>
size_t getSize(T (& const)[ size ])
{
std::cout << "Size: " << size << "\n";
return size;
}
+1。正是我在想什么。 –
@Marlon即时通讯新的模板在C++中,所以我应该如何调用函数foo ?,一个例子将不胜感激。 –
@ user945511我编辑了我的答案。 – Marlon