[c++] C++数组int a[]作为函数参数的几个问题

本文探讨了C++中数组作为函数参数时的行为。尽管从语法上看似乎传递了整个数组,实际上C++传递的是数组首元素的地址。因此,函数内部对数组的修改会影响到原始数组。然而,函数内部无法获取到数组的实际大小,只保留了指向第一个元素的信息。这表明C++通过指针传递数组,而非复制其内容。
摘要由CSDN通过智能技术生成

参考:https://www.cnblogs.com/gongpixin/p/5172012.html

本文需要解决C++中关于数组的2个问题:
1. 数组作为函数参数,传值还是传址?  : 传址。
2. 函数参数中的数组元素个数能否确定? :不能确定。

当我们直接将数组a作为参数调用testArrayArg()时,实参与形参的地址均是0012FF4C。并且,在testArrayArg()中将a[3]的值修改为10后,返回main()函数中,a[3]的值也已经改变。这些都说明C++中数组作为函数参数是传址

#include <iostream>

using namespace std;

void testArrayArg(int a[])
{
  cout << endl;

  cout << "in func..." << endl;
  cout << "array address: " << a << endl;
  cout << "array size: " << sizeof(a) << endl;
  cout << "array element count: " << sizeof(a) / sizeof(a[0]) << endl;

  cout << "changing the 4th element's value to 10." << endl;
  a[3] = 10;
}

int main()
{
  int a[] = {1, 2, 3, 4, 5};

  cout << "in main..." << endl;
  cout << "array address: " << a << endl;
  cout << "array size: " << sizeof(a) << endl;
  cout << "array element count: " << sizeof(a) / sizeof(a[0]) << endl;

  testArrayArg(a);

  cout << endl << "the 4th element's value: " << a[3] << endl;

  return 0;
}

特别需要注意的是,在main()中,数组的大小是可以确定的。

但作为函数参数传递后,其大小信息丢失,只剩下数组中第一个元素的信息。

这是因为C++实际上是将数组作为指针来传递,而该指针指向数组的第一个元素。至于后面数组在哪里结束,C++的函数传递机制并不负责。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心心喵

喵喵(*^▽^*)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值