当函数具有特定大小的数组参数时,为什么要用指针替换它?

当函数具有特定大小的数组参数时,为什么要用指针替换它?

根据下面的程序,

#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
  1. 为什么数组作为指向第一个元素的指针传递?
  2. 这是C的遗产吗?
  3. 标准怎么说?
  4. 为什么C+的严格类型安全性下降了?


心有法竹
浏览 761回答 3
3回答

UYOU

是。在C和C+中,不能将数组传递给函数。事情就是这样。你为什么要做普通数组?你有没有看过boost/std::tr1::array/std::array或std::vector?注意,您可以将对任意长度数组的引用传递给函数。模板..从我的头顶上:template<&nbsp;std::size_t&nbsp;N&nbsp;>void&nbsp;f(char&nbsp;(&arr)[N]){ &nbsp;&nbsp;std::cout&nbsp;<<&nbsp;sizeof(arr)&nbsp;<<&nbsp;'\n';}

慕桂英546537

在C/C+术语中有一个很棒的词,用于静态数组和函数指针-衰变..考虑以下代码:int intArray[] = {1, 3, 5, 7, 11}; // static array of 5 ints//...void f(int a[]) {&nbsp; // ...}// ...f(intArray); // only pointer to the first array element is passedint length = sizeof intArray/sizeof(int); // calculate intArray elements quantity (equals 5)int ptrToIntSize = sizeof(*intArray); // calculate int * size on your system
打开App,查看更多内容
随时随地看视频慕课网APP