vector做函数参数和普通数组做函数参数有什么区别
结论:
1,vector做函数参数,当vector参数做输出(vector数组需要在函数中被改变)的时候,需要传入vector的引用。
2,vector做函数参数,当vector参数做输入参数(只使用不改变)时,直接传数组进来就行,不需要传引用。
3,普通数组(arr[])做函数参数,不管是输入参数还是输出参数都只传数组名进函数就行。
4,普通数组做函数参数被传入函数后,会退阶为arr[0]处的指针,又因为普通数组是连续的内存空间,可以通过数组首地址对数组元素进行访问和修改,所以不用传引用。
5,vector类型的数组是一个STL类对象,做函数参数后,该函数会在函数内部重新拷贝一个vector对象,当vector做函数参数输出的时候,函数内部操作的vector对象是拷贝后的vector对象,在函数执行结束后,拷贝后的vector对象会被析构。而原来的vector对象不会发生任何改变。但如果传入引用做函数参数,结果就大不相同。引用参数是原参数的别名,引用做函数参数时,函数内部操作的参数就是该引用参数,所以,当该函数执行结束后,不会析构引用对象。
#include <iostream>#include <vector>using namespace std;int printNums1(int a[], int len) {for(int i = 0; i < len; i++) {cout << a[i] << " ";}cout << endl;a[6] = 9;a[7] = 9;a[8] = 9;a[9] = 9;return 0;}int printNums2(vector<int> a) {vector<int>::iterator it;for(it = a.begin(); it != a.end(); it++) {cout << *it << " ";}cout << endl;a.push_back(66);a.push_back(77);a.push_back(88);a.push_back(99);return 0;}int printNums3(vector<int> &a) {vector<int>::iterator it;for(it = a.begin(); it != a.end(); it++) {cout << *it << " ";}cout << endl;a.push_back(66);a.push_back(77);a.push_back(88);a.push_back(99);return 0;}int main() {int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};vector<int> nums;nums.push_back(11);nums.push_back(22);nums.push_back(33);nums.push_back(44);nums.push_back(55);printNums1(a, 10);printNums2(nums); cout << endl;for(int i = 0; i < 10; i++) {cout << a[i] << " ";}cout << endl;vector<int>::iterator it;for(it = nums.begin(); it != nums.end(); it++) {cout << *it << " ";}cout << endl << endl;printNums3(nums);//vector<int>::iterator it;for(it = nums.begin(); it != nums.end(); it++) {cout << *it << " ";}cout << endl;return 0;}/*运行结果:0 1 2 3 4 5 6 7 8 911 22 33 44 550 1 2 3 4 5 9 9 9 911 22 33 44 5511 22 33 44 5511 22 33 44 55 66 77 88 99总结:vector<> nums 是对象,不是指针 ,想要改变其值做输出,必须要引用做函数参数 */
vector做函数参数和普通数组做函数参数有什么区别相关推荐
- C语言多维数组做函数参数会退化,数组做函数参数退化问题
一.数组做函数参数退化问题 数组做函数参数时,会退化为指针. 1.把数组的内存首地址和数组的有效长度传入函数. 2.实参数组和函数参数数组的数据类型不一样.形参中的数组,编译器会把它当做一个指针处理, ...
- C语言里的函数指针、指针数组和函数指针数组
1.函数指针 函数指针也是一个指针变量,但这个指针存放的是一个函数的地址,以前的函数通过函数名来调用,现在也可以通过指针来调用,运用类比法理解,例如以前的**int p是一个整型变量,是一个指向一个整 ...
- 【C】C语言函数(包括:函数编写位置、数组作函数实参)
函数概述 函数的分类 函数是C语言程序基本的组成单位,每个程序有且只能有一个主函数(main()),其他的函数都是子函数.按照不同的额分类标准,函数可以分成不同的类: 函数从是否有返回值,可以将函数分 ...
- 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )
文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...
- c语言数组与函数,C语言的数组与函数
数组作为函数形参 // 1. 形参是一个指针 void myfunction(int *param) { } // 2. 形参是一个已定义大小的数组 void myfunction(int param ...
- oracle数组转换字符串函数,Oracle 字符串转数组的函数
create type char_table is table of varchar2(4000);--创建自定义类型脚本 create or replace function split_strin ...
- C++_const修饰指针_指针和数组_指针和函数_指针配合数组和函数案例_用指针数组实现冒泡排序---C++语言工作笔记024
然后我们再来看一下const修饰指针 这里第一种是常量指针 可以看到 const int * p =&a 这个p就是一个常量指针,可以看到,常量指针,指明了,这个指针指向的值是一个常量不能修改 ...
- C++二维数组做函数参数
C++二维数组做函数参数 二维数组做函数参数的形式主要有: /对于一个m行n列int元素的二维数组 //函数f的形参形式 f(int daytab[m][n]) {...}//以下两种可以忽略行数 f ...
- C++笔记 二维数组作为函数的参数详解 三种传参的方法总结 注意要点总结
文章目录 1.C/C++ 二维数组作为函数的参数 2.不合法写法总结 3.测试案例 3.1 传参方式1 3.2 传参方式2 3.3 传参方式3 4.运行结果 5.总结 1.C/C++ 二维数组作为函数 ...
最新文章
- 《C++面向对象高效编程(第2版)》——3.11 类名、成员函数名、参数类型和文档...
- c:线性表的链式表示
- MyBatis延迟加载及在spring中集成配置
- 九度OJ 1168:字符串的查找删除 (查找)
- ux和ui_阅读10个UI / UX设计系统所获得的经验教训
- 阿里巴巴下一代云分析型数据库AnalyticDB入选Forrester Wave™ 云数仓评估报告 解读
- 净利下降7成、新业务“扛大旗” 阿里转型更需耐心
- 功能详细设计文档模板
- UmiJS基础UmiJS+Dva
- 文件夹批量重命名编号的快速方法
- html特殊符号小企鹅,企鹅侦探名字如何取特殊 名字可以使用的特殊符号
- Arch LinuxLinux引导教程 2021.7.22
- asp和asp.net有什么区别?
- php 环比计算公式,详情
- NDK Resolution Outcome: Project settings: Gradle model version=XXX, NDK version is UNKNOWN
- 如何使用ANT在命令行进行编译和测试
- 解决QQ安全进程(护盾)弹出问题
- Python的Pexpect详解
- 读《精通JavaScript+jQuery》笔记二
- 开启 Linux 版的 Window 子系统(WSL)