为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++ C
心有法竹 2019-06-01 15:52:53
当函数具有特定大小的数组参数时,为什么要用指针替换它?根据下面的程序,#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个赞

是。在C和C+中,不能将数组传递给函数。事情就是这样。

你为什么要做普通数组?你有没有看过boost/std::tr1::array/std::arraystd::vector?

注意,您可以将对任意长度数组的引用传递给函数。模板..从我的头顶上:

template< std::size_t N >void f(char (&arr)[N]){
  std::cout << sizeof(arr) << '\n';}


查看完整回答
反对 回复 2019-06-01
?
慕桂英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


查看完整回答
反对 回复 2019-06-01
  • 3 回答
  • 0 关注
  • 760 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信