实参和形参的四种结合方式
实参 形参 实例
数组名 数组名 1.1
数组名 指针变量 1.2
指针变量 数组名 1.3
指针变量 指针变量 1.4

本文以输入10个整数,然后对其进行排序,然后输出的程序为例:

形参为数组名,实参是数组名

实例代码1.1:

  1. #include<iostream>
  2. using namespace std;
  3. int main(){
  4. void Sort(int a[],int n);
  5. int a[10],i;
  6. cout<<"Please input 10 interges: "<<endl;
  7. for(i=0;i<10;i++){
  8. cin>>a[i];
  9. }
  10. Sort(a,10);
  11. cout<<"Sorted order:";
  12. for(i=0;i<10;i++){
  13. cout<<a[i]<<" ";
  14. }
  15. cout<<endl;
  16. return 0;
  17. }
  18. void Sort(int a[], int n){
  19. int i,j,k,tool;
  20. for(i=0;i<n;i++){
  21. k=i;
  22. for(j=i;j<n;j++){
  23. if(a[j]<a[k])
  24. k=j;
  25. }
  26. tool=a[k];
  27. a[k]=a[i];
  28. a[i]=tool;
  29. }
  30. }

形参中a[ ]中,可以不写任何的数字,只需要表示这是一个数组即可。如果其中放数字的话,可以放置任何一个正整数(不一定等于实参数组的大小,可以比实参中的数组大或者小)。

即:

  1. void Sort(int a[], int n )

也可以写成

  1. void Sort(int a[2], int n)

或者

  1. void Sort(int a[12], int n)

实参是数组名,形参是指针变量

实例代码1.2:

  1. #include<iostream>
  2. using namespace std;
  3. int main(){
  4. void Sort(int a[],int n);
  5. int a[10],i;
  6. cout<<"Please input 10 interges: "<<endl;
  7. for(i=0;i<10;i++){
  8. cin>>a[i];
  9. }
  10. Sort(a,10);
  11. cout<<"Sorted order:";
  12. for(i=0;i<10;i++){
  13. cout<<a[i]<<" ";
  14. }
  15. cout<<endl;
  16. return 0;
  17. }
  18. void Sort(int *a, int n){
  19. int i,j,k,tool;
  20. for(i=0;i<n;i++){
  21. k=i;
  22. for(j=i;j<n;j++){
  23. if(a[j]<a[k])
  24. k=j;
  25. }
  26. tool=a[k];
  27. a[k]=a[i];
  28. a[i]=tool;
  29. }
  30. }

在文章《C++一维数组和指针的关系总结》中,已经提到数组名实际上代表数组的首元素的地址也就是说a等价于&a[0]

在实参中,数组名代表数组中的第一个元素的地址,所以实参实际上只传递了数组的第一个元素的指针。因此,在形参中,只需要一个指针变量来接受传递过来的值即可。

实参是指针变量,形参是数组

实例代码1.3:

  1. #include<iostream>
  2. using namespace std;
  3. int main(){
  4. void Sort(int a[],int n);
  5. int a[10],i;
  6. cout<<"Please input 10 interges: "<<endl;
  7. for(i=0;i<10;i++){
  8. cin>>a[i];
  9. }
  10. Sort(&a[0],10);
  11. cout<<"Sorted order:";
  12. for(i=0;i<10;i++){
  13. cout<<a[i]<<" ";
  14. }
  15. cout<<endl;
  16. return 0;
  17. }
  18. void Sort(int a[], int n){
  19. int i,j,k,tool;
  20. for(i=0;i<n;i++){
  21. k=i;
  22. for(j=i;j<n;j++){
  23. if(a[j]<a[k])
  24. k=j;
  25. }
  26. tool=a[k];
  27. a[k]=a[i];
  28. a[i]=tool;
  29. }
  30. }

跟上文分析的一致,通过&a[0]作为实参进行传值,证明了数组名实际上代表数组的首元素的地址也就是说a等价于&a[0]

形参是指针变量,实参是指针变量

实例代码1.4:

  1. #include<iostream>
  2. using namespace std;
  3. int main(){
  4. void Sort(int a[],int n);
  5. int a[10],i;
  6. cout<<"Please input 10 interges: "<<endl;
  7. for(i=0;i<10;i++){
  8. cin>>a[i];
  9. }
  10. Sort(&a[0],10);
  11. cout<<"Sorted order:";
  12. for(i=0;i<10;i++){
  13. cout<<a[i]<<" ";
  14. }
  15. cout<<endl;
  16. return 0;
  17. }
  18. void Sort(int *a, int n){
  19. int i,j,k,tool;
  20. for(i=0;i<n;i++){
  21. k=i;
  22. for(j=i;j<n;j++){
  23. if(a[j]<a[k])
  24. k=j;
  25. }
  26. tool=a[k];
  27. a[k]=a[i];
  28. a[i]=tool;
  29. }
  30. }

这种方法是最直接了当的方法,实参和形参的传递的数值和接受的数值都是指针

C++用指针变量作为函数的参数接受数组的值的问题的总结的更多相关文章

  1. C语言指针变量作为函数参数

    0x01 指针变量作为函数参数的作用是:将一个变量的地址传送到另一个函数中. 0x02 简单的例子:虽然都能实现功能,但意义不同. 正确的写法: #include <stdio.h> vo ...

  2. C语言---指针变量作为函数参数

    在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着 ...

  3. C++(二十二) — 指针变量、函数指针、void指针

    1.指针变量 (1)指针变量必须在初始化后才可以正常使用,初始化就是给他分配一个有效的数据地址. 先初始化,后使用. (2)指针可以进行加减运算,++ 或者 --:将指针的位置向前或者向后移动一个数据 ...

  4. [C++程序设计]用函数指针变量调用函数

    指针变量也可以指向一个函数.一个函数在编译时被分配给一个入口地址.这个函数入口地址就称为函数的指针.可以用一个指针变量指向函数,然后通过该指针变量调用此函数 #include <iostream ...

  5. [C++程序设计]用指针变量作函数参数接收数组地址

    #include <iostream> using namespace std; void select_sort(int *p, int n) { int i, j, k; ; i &l ...

  6. fopen()函数中参数mode的取值

    FILE * fopen(const char * path,const char * mode); 参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存 ...

  7. js 函数作为参数+接受任意数量参数

    javascript中的函数是“复合数据类型”,又成为“引用类型”.引用类型的变量指向存储单元中存放的是它们的实际存放地址.函数名是对函数的一种引用.var a=max_num ;a()就可以调用fu ...

  8. C#函数的参数传递方式1(值传递与地址传递)

    using System; namespace class1 { class program { static void Main(string[] args) { //值传递引用,实际参数不会变化 ...

  9. jfinal如何获取参数为数组的值

    前台: var postParams = { ids:["qw","ew"]}; 后台: String[] userids = this.getParaValu ...

随机推荐

  1. ural 2012 About Grisha N.(水)

    2012. About Grisha N. Time limit: 1.0 secondMemory limit: 64 MB Grisha N. told his two teammates tha ...

  2. CentOS7 常用命名整理

    前言: 总是为了一点命令去查搜索引擎,今天简单整理了一下常用的一些命名: 一.网络配置相关 0.修改 IP&DNS 信息 # vi /etc/sysconfig/network-scripts ...

  3. python的单例模式--解决多线程的单例模式失效

    单例模式 单例模式(Singleton Pattern) 是一种常用的软件设计模式,主要目的是确保某一个类只有一个实例存在.希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场 比如,某个 ...

  4. STL迭代器辅助函数——advance

    Advance(i, n) increments the iterator i by the distance n. If n > it it , the call has no effect. ...

  5. 前端调错看ajax请求操作

    ---------------------------------------------------------------------------------------------------- ...

  6. 第9章 DOM对象,控制HTML元素

    学习地址:http://www.imooc.com/learn/10

  7. 极路由U-boot解锁刷root固件教程,root后可刷华硕、如意云等多种固件,附赠全套刷软

    9008正式版固件将会封堵此漏洞,想root的同学尽快了.安装新工具箱里的root保留,可升级官方最新固件并保留root. 此方法并非本人原创,只是将root的过程和经验做个总结,比较适合菜鸟做参考, ...

  8. CentOS7网卡设置为桥接模式静态IP配置方法详解

    备份网络文件 [root@localhost network-scripts]# cd /etc/sysconfig/network-scripts/ [root@localhost network- ...

  9. Spark on yarn的两种模式 yarn-cluster 和 yarn-client

    从深层次的含义讲,yarn-cluster和yarn-client模式的区别其实就是Application Master进程的区别,yarn-cluster模式下,driver运行在AM(Applic ...

  10. el表达式对js方法的传值

    我常用于在jsp页面遍历集合和分页中的页面跳转事件. jsp: <!-- 引入jstl --> <%@ taglib prefix="c" uri="h ...