C++函数参数是结构体或者数组(cstdarg/.../va_arg/va_end)
注意:下面这个示例,与java不一样,如果参数不是指针,那么相当于传递该结构体中的参数
struct USER {int a;int b;
};
// 该方法等同于将USER中的所有参数都传递了过去,示例在文章最末尾
void function1(USER user) {user.a=666;user.b=777;
}
int main()
{USER user;user.a = 1;user.b = 2;function1(user);// 打印出1std::cout << user.a << std::endl;// 打印出2std::cout << user.b << std::endl;
}
一:使用指针作为参数
struct USER {int a;int b;
};
void function1(USER* user) {user->a=666;user->b=777;
}
int main()
{USER user;user.a = 1;user.b = 2;function1(&user);// 打印出666std::cout << user.a << std::endl;// 打印出777std::cout << user.b << std::endl;
}
void function1(USER user) {user.a=666;user.b=777;
}
//上面的function1本质上就是function2
void function2(int a,int b) {a=666;b=777;
}
//所以不会像java那样改变对象里的值
二:数组作为参数
//由于数组本质是指针,所以传递一个数组,其实就是传递个指针
void function1(int array[],int length) {// array其实是个指针,而并不是数组,这一点需要注意std::cout << array << std::endl;std::cout << sizeof(array) << std::endl;
}
int main()
{int a[] = {1,2,3};function1(a,3);
}
三:使用引用作为参数
struct USER {int a;int b;
};
void function1(USER& user) {user.a = 666;user.b = 777;
}
int main()
{USER user;user.a = 1;user.b = 2;function1(user);// 打印出666std::cout << user.a << std::endl;// 打印出777std::cout << user.b << std::endl;
}
四:默认参数
// 这个写法的意思是如果不传递第二个参数,则将第二个参数默认赋值666
void function1(int a,int b=666) {std::cout << a <<"------"<<b<< std::endl;
}
int main()
{// 打印出5368和666,因为没传递第2个参数,所以取默认值666function1(5638);// 打印出5368和5637function1(5638,5637);
}
五:main函数的参数,不定量参数1
int main(int count,char* arg[])
{// count表示多少个参数// arg表示参数内容
}
五:不定量参数2
与上述四中不是点点点(…)的写法相比,唯一的优势就是参数数组中,类型可以不相同,比如数组第一个是int,第二个可以使float,不过此方式并不常用
#include <cstdarg>//首先引用cstdarg头文件
void m1(int count,...) {char * parg;// 将...数组的指针放到parg里va_start(parg,count);// 使用va_arg函数获取数组中的第一个值// 注意此处int,假如我们传递的第1个参数是int,第2个参数是float,那么// 走第一次该方法的时候,此处是int,走第二次该方法的时候,此处应该是floatint first=va_arg(parg,int);std::cout << first << std::endl;// 再次使用va_arg函数获取数组中的第2个值,依次类推int second=va_arg(parg, int);std::cout << second << std::endl;// 释放内存va_end(parg);
}
int main(int count,char* arg[])
{// 打印出56,3m1(3,56,3,8);
}
15.2–15.6
C++函数参数是结构体或者数组(cstdarg/.../va_arg/va_end)相关推荐
- 【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体 const
文章目录 1. 定义和使用 2. 结构体数组 3. 结构体指针 4. 结构体嵌套结构体 5. 结构体做函数参数 6. 结构体 const 1. 定义和使用 结构体属于用户自定义的数据类型,允许用户存储 ...
- Golang——结构体创建与初始化、结构体与数组、结构体与切片、结构体与map、结构体作为函数参数、结构体方法、结构体方法继承
结构体: 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 结构体可以很好的管理一批有联系的数据,使用结构体可以提高程序的易读性,类似于Java的类一样 不能在结构体直接赋值 字段名必须唯一 ...
- C++_结构体指针_嵌套结构体_结构体做为函数参数_结构体值传递和指针传递---C++语言工作笔记026
然后我们来看结构体指针. 可以看到我们先去定义一个结构体 然后我们在main函数中,去声明一个结构体 s 然后我们定义一个指针 int *p = &s; 指向这个结构体变量. 这里要注意
- C语言学习笔记11-结构体(struct、结构作为函数参数、结构数组)、联合体/共用体typedef; union(大、小端序)
C语言-结构类型 程序中的数据都需要有类型支撑,当数据很复杂时(不是简单的一个值,如时间信息:年月日时分秒6个数据需要作为一个整体),我们需要声明一个新的结构类型来描述这种复合的数据(可以包含很多不同 ...
- 【☀️C语言函数传参の结构体数组篇☀️】
背景介绍 C语言中函数参数传递的两种方式("引用传递做函数参数"是C++的特性,C语言不支持.) (1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个 ...
- C语言试题五十二之学生的记录由学号和成绩组称个,n名大学生得数据已在主函数中放入结构体数组a中,请编写函数fun,它的功能时:按分数的高低排列学生的记录,高分在前。
1. 题目 请编写一个函数void function(Student a[], int n),其功能时:学生的记录由学号和成绩组称个,n名大学生得数据已在主函数中放入结构体数组a中,请编写函数fun, ...
- c语言 由函数组成的数组,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的_考题宝...
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是按分数的高低排列学生的记录,低分在前. 注意:部分源程序给出如下. 请勿改动主函数main和其 ...
- c# 编程入门第六课常量,枚举,枚举转换成其他类型变量(枚举和int,转 string字符串转枚举),结构体,数组,冒泡排序,实际使用排序,方法(函数)
c# 编程入门第六课 文章目录 c# 编程入门第六课 1. 常量 2. 枚举 3. 枚举转换成其他类型变量 3.1 枚举和int 3.2 转string 3.2 字符串转枚举 4.结构体 5.数组 7 ...
- 方法参数是结构体指针,报错信息是空指针怎么办
方法参数是结构体指针,报错信息是空指针怎么办 如果是函数方法需要使用前面定义的结构体指针,但这时候指针为空,编译器报错指针为空,这时候只需要在我们需要指针的地方加上 if(T){}; 确保它不为空就行 ...
最新文章
- 从单张图像学习双目图像
- php 5.6 mcrypt,php-mcrypt 在PHP5.60+的版本中怎么使用?
- 程序员,你也该为自己想想未来
- 百题大冲关系列课程更新啦!这次是 Golang
- 20220129--CTF WEB方向刷题-- WP--非常简单的webshell题
- python获取pid并杀死_用python记录运行pid,并在需要时kill掉它们的实例
- python 判断是否连接wifi_python操作 linux连接wifi,查看wifi连接状态方法
- 已经发车的票还能取出来吗_火车票报销凭证是啥?能不打印吗?官方回应来了...
- 477.汉明距离总和
- 计算机考研百天,2021非全日制研究生备考即将进入百天倒计时的你还在坚持吗?...
- 每日学习, 特征方程的复根
- iOS Protocol 详解
- 美国国家安全局发布零信任安全模型指南
- css3 标点符号在首位,CSS 让标点符号不出现在行首
- 黑马程序员--java基础复习之网络编程
- iis7.5如何将应用程序池的启动模式(startMode)从onDemand(需要时)更改为AlwaysRunning(一直运行)?
- 金蝶产品虚拟化解决方案
- 豆瓣评分小程序Part-3
- oracle添加序列
- 独立成分分析 与 功能连接之间的关联尝试 by 张高燕
热门文章
- 扩展欧几里得算法(双六游戏)
- java邮件设置成可修改_Java实现发送邮件(可配置)忘记密码,发送邮件
- Python标准库中的uuid
- Spring Cloud Stream与RabbitMQ 生产者和消费者位于同一个应用服务
- JDK8新特性LocalDate、LocalTime和LocalDateTime
- python中numpy函数fft_如何在PyTorch中正确使用Numpy的FFT函数?
- java.library.path在哪?
- cipher java aes 模式_java – 为什么我的AES Cipher在init的DECRYPT_MODE上抛出一个InvalidKeyException...
- JAVA加载 编译 运行,在Java 7中编译的加载/运行类6
- nginx tomcat spring-boot 对json等数据压缩