当函数具有特定大小的数组参数时,为什么要用指针替换它?根据下面的程序,#include <iostream>using namespace std;void foo( char a[100] ){
cout << "foo() " << sizeof( a ) << endl;}int main(){
char bar[100] = { 0 };
cout << "main() " << sizeof( bar ) << endl;
foo( bar );
return 0;}产出main() 100foo() 4为什么数组作为指向第一个元素的指针传递?这是C的遗产吗?标准怎么说?为什么C+的严格类型安全性下降了?
3 回答
UYOU
TA贡献1878条经验 获得超4个赞
boost
/std::tr1::array
/std::array
std::vector
?
template< std::size_t N >void f(char (&arr)[N]){ std::cout << sizeof(arr) << '\n';}
慕桂英546537
TA贡献1848条经验 获得超10个赞
在C/C+术语中有一个很棒的词,用于静态数组和函数指针-衰变..考虑以下代码:
int intArray[] = {1, 3, 5, 7, 11}; // static array of 5 ints
//...
void f(int a[]) {
// ...
}
// ...
f(intArray); // only pointer to the first array element is passed
int length = sizeof intArray/sizeof(int); // calculate intArray elements quantity (equals 5)
int ptrToIntSize = sizeof(*intArray); // calculate int * size on your system
- 3 回答
- 0 关注
- 760 浏览
添加回答
举报
0/150
提交
取消