C++ 传递数组的问题
来源:互联网 发布:苹果骚扰拦截软件 编辑:程序博客网 时间:2024/06/05 23:05
转自http://blog.csdn.net/tanghw/article/details/6554538
http://blog.csdn.net/wdqbupt/article/details/6858676 可以看看学学C++基础
本文需要解决C++中关于数组的2个问题:
1. 数组作为函数参数,传值还是传址?
2. 函数参数中的数组元素个数能否确定?
先看下面的代码。
- #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;
- }
运行结果如下:
in main...
array address: 0012FF4C
array size: 20
array element count: 5
in func...
array address: 0012FF4C
array size: 4
array element count: 1
changing the 4th element's value to 10.
the 4th element's value: 10
当我们直接将数组a作为参数调用testArrayArg()时,实参与形参的地址均是0012FF4C。并且,在testArrayArg()中将a[3]的值修改为10后,返回main()函数中,a[3]的值也已经改变。这些都说明C++中数组作为函数参数是传址。
特别需要注意的是,在main()中,数组的大小是可以确定的。
array size: 20
array element count: 5
但作为函数参数传递后,其大小信息丢失,只剩下数组中第一个元素的信息。
array size: 4
array element count: 1
这是因为C++实际上是将数组作为指针来传递,而该指针指向数组的第一个元素。至于后面数组在哪里结束,C++的函数传递机制并不负责。
上面的特性可总结为,数组仅在定义其的域范围内可确定大小。
因此,如果在接受数组参数的函数中访问数组的各个元素,需在定义数组的域范围将数组大小作为另一辅助参数传递。则有另一函数定义如下:
- void testArrayArg2(int a[], int arrayLength)
- {
- cout << endl << "the last element in array is: " << a[arrayLength - 1] << endl;
- }
可在main()中这样调用:
testArrayArg2(a, sizeof(a) / sizeof(a[0]));
这样,testArrayArg2()中便可安全地访问数组元素了。
- c 语言 二维数组的函数参数传递的问题
- C++:二维数组和二级指针的传递问题
- C++ 传递数组的问题
- C++ 传递数组的问题
- perl传递数组的问题
- Ajax传递数组的问题
- C语言多维数组参数传递问题
- C/C++--定义二维数组及二维数组的传递
- C/C++ 中二维数组的传递
- C下面的数组指针传递
- c语言中二维数组的传递
- c语言二维数组的传递
- 关于使用mxGetPr从MATLAB向C中传递数组的相关问题
- 黑马程序员---------C语言 关于数组被当作函数参数传递的问题
- WCF传递多维数组的问题
- 页面间的数组传递注意问题
- 二维数组作为参数传递的问题
- pomelo传递数组出现的问题
- 在Drupal的form表单中使用js事件,比如onClick和onChange等,或者加载一些css样式等自己需要的杂七杂八的东西
- 求解分数(真分数和假分数)的循环周期
- IOS开发(54)之Storyboard之传值
- WindowsCE环境下无线网卡的自动安装
- android面试常见题
- C++ 传递数组的问题
- 【.Net免费公开课】--邹华栋老师授技“跨平台的.Net
- cloudstack安装和管理
- POJ 1063
- 【面试】struts2的工作流程
- [Drupal教程] 如何添加CSS和Javascript定制Drupal7表单
- 定制linux kernel,发挥计算机性能
- 基于WinCE操作系统的通用USB数控键盘设计
- cloudstack 查看QQ群笔记知识点总结