【问题标题】:Difference in function argument between int pointer and int arrayint 指针和 int 数组之间函数参数的差异
【发布时间】:2022-07-25 23:53:00
【问题描述】:

在 C++ 中将 int 指针或 int 数组作为函数参数有什么区别?

void arrayFunction1(int * x) {
  for(int i = 0; i < 10; i++) {
    cout << x[i] << endl;
  }
}

void arrayFunction2(int x[]) {
  for(int i = 0; i < 10; i++) {
    cout << x[i] << endl;
  }
}

int main() {
  int dstdata[10];
  
  arrayFunction1(dstdata);
  arrayFunction2(dstdata);
  
  return 0;
}

在我看来,这两个结果都一样。

【问题讨论】:

  • int[] 作为参数类型并不表示“int 的数组”,而是表示“指向int 的指针”。你的原型是等价的,两个函数参数都等价于传递&amp;dstdata[0]
  • 是的,它们完全一样,对于那些认为它们会有所不同然后想知道为什么sizeof(x) 会给出意想不到的结果的人来说,这是一个无穷无尽的困惑来源。

标签: c++


【解决方案1】:

有完全相同的。在函数参数中int x[] 只是int* x 的另一种写法。甚至int x[10] 也是一样的(10 完全被忽略了)。

现在,为什么 Kernighan 和 Ritchie(C 的发明者)认为这种欺骗是个好主意,这是另一个问题。我猜他们没有考虑所有必须学习语法的人。

【讨论】:

  • 感谢您的回答。考虑到这两个符号是等价的,什么被认为是“最佳实践”?
  • @RiccardoPerego 指针版本,老实说x 是什么。
  • @RiccardoPerego 我认为最好的做法是根本不传递指针,而是使用std::vectorstd::array
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 2013-07-26
  • 1970-01-01
相关资源
最近更新 更多