注意:下面这个示例,与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)相关推荐

  1. 【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体 const

    文章目录 1. 定义和使用 2. 结构体数组 3. 结构体指针 4. 结构体嵌套结构体 5. 结构体做函数参数 6. 结构体 const 1. 定义和使用 结构体属于用户自定义的数据类型,允许用户存储 ...

  2. Golang——结构体创建与初始化、结构体与数组、结构体与切片、结构体与map、结构体作为函数参数、结构体方法、结构体方法继承

    结构体: 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 结构体可以很好的管理一批有联系的数据,使用结构体可以提高程序的易读性,类似于Java的类一样 不能在结构体直接赋值 字段名必须唯一 ...

  3. C++_结构体指针_嵌套结构体_结构体做为函数参数_结构体值传递和指针传递---C++语言工作笔记026

    然后我们来看结构体指针. 可以看到我们先去定义一个结构体 然后我们在main函数中,去声明一个结构体 s 然后我们定义一个指针 int *p = &s; 指向这个结构体变量. 这里要注意

  4. C语言学习笔记11-结构体(struct、结构作为函数参数、结构数组)、联合体/共用体typedef; union(大、小端序)

    C语言-结构类型 程序中的数据都需要有类型支撑,当数据很复杂时(不是简单的一个值,如时间信息:年月日时分秒6个数据需要作为一个整体),我们需要声明一个新的结构类型来描述这种复合的数据(可以包含很多不同 ...

  5. 【☀️C语言函数传参の结构体数组篇☀️】

    背景介绍 C语言中函数参数传递的两种方式("引用传递做函数参数"是C++的特性,C语言不支持.) (1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个 ...

  6. C语言试题五十二之学生的记录由学号和成绩组称个,n名大学生得数据已在主函数中放入结构体数组a中,请编写函数fun,它的功能时:按分数的高低排列学生的记录,高分在前。

    1. 题目 请编写一个函数void function(Student a[], int n),其功能时:学生的记录由学号和成绩组称个,n名大学生得数据已在主函数中放入结构体数组a中,请编写函数fun, ...

  7. c语言 由函数组成的数组,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的_考题宝...

    学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是按分数的高低排列学生的记录,低分在前. 注意:部分源程序给出如下. 请勿改动主函数main和其 ...

  8. c# 编程入门第六课常量,枚举,枚举转换成其他类型变量(枚举和int,转 string字符串转枚举),结构体,数组,冒泡排序,实际使用排序,方法(函数)

    c# 编程入门第六课 文章目录 c# 编程入门第六课 1. 常量 2. 枚举 3. 枚举转换成其他类型变量 3.1 枚举和int 3.2 转string 3.2 字符串转枚举 4.结构体 5.数组 7 ...

  9. 方法参数是结构体指针,报错信息是空指针怎么办

    方法参数是结构体指针,报错信息是空指针怎么办 如果是函数方法需要使用前面定义的结构体指针,但这时候指针为空,编译器报错指针为空,这时候只需要在我们需要指针的地方加上 if(T){}; 确保它不为空就行 ...

最新文章

  1. 从单张图像学习双目图像
  2. php 5.6 mcrypt,php-mcrypt 在PHP5.60+的版本中怎么使用?
  3. 程序员,你也该为自己想想未来
  4. 百题大冲关系列课程更新啦!这次是 Golang
  5. 20220129--CTF WEB方向刷题-- WP--非常简单的webshell题
  6. python获取pid并杀死_用python记录运行pid,并在需要时kill掉它们的实例
  7. python 判断是否连接wifi_python操作 linux连接wifi,查看wifi连接状态方法
  8. 已经发车的票还能取出来吗_火车票报销凭证是啥?能不打印吗?官方回应来了...
  9. 477.汉明距离总和
  10. 计算机考研百天,2021非全日制研究生备考即将进入百天倒计时的你还在坚持吗?...
  11. 每日学习, 特征方程的复根
  12. iOS Protocol 详解
  13. 美国国家安全局发布零信任安全模型指南
  14. css3 标点符号在首位,CSS 让标点符号不出现在行首
  15. 黑马程序员--java基础复习之网络编程
  16. iis7.5如何将应用程序池的启动模式(startMode)从onDemand(需要时)更改为AlwaysRunning(一直运行)?
  17. 金蝶产品虚拟化解决方案
  18. 豆瓣评分小程序Part-3
  19. oracle添加序列
  20. 独立成分分析 与 功能连接之间的关联尝试 by 张高燕

热门文章

  1. 扩展欧几里得算法(双六游戏)
  2. java邮件设置成可修改_Java实现发送邮件(可配置)忘记密码,发送邮件
  3. Python标准库中的uuid
  4. Spring Cloud Stream与RabbitMQ 生产者和消费者位于同一个应用服务
  5. JDK8新特性LocalDate、LocalTime和LocalDateTime
  6. python中numpy函数fft_如何在PyTorch中正确使用Numpy的FFT函数?
  7. java.library.path在哪?
  8. cipher java aes 模式_java – 为什么我的AES Cipher在init的DECRYPT_MODE上抛出一个InvalidKeyException...
  9. JAVA加载 编译 运行,在Java 7中编译的加载/运行类6
  10. nginx tomcat spring-boot 对json等数据压缩