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

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

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

实例代码1.1:

#include<iostream>
using namespace std;
int main(){
void Sort(int a[],int n);
int a[10],i;
cout<<"Please input 10 interges: "<<endl;
for(i=0;i<10;i++){
cin>>a[i];
}
Sort(a,10);
cout<<"Sorted order:";
for(i=0;i<10;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
void Sort(int a[], int n){
int i,j,k,tool;
for(i=0;i<n;i++){
k=i;
for(j=i;j<n;j++){
if(a[j]<a[k])
k=j;
}
tool=a[k];
a[k]=a[i];
a[i]=tool;
}
}

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

即:

void Sort(int a[], int n )

也可以写成

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

或者

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

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

实例代码1.2:

#include<iostream>
using namespace std;
int main(){
void Sort(int a[],int n);
int a[10],i;
cout<<"Please input 10 interges: "<<endl;
for(i=0;i<10;i++){
cin>>a[i];
}
Sort(a,10);
cout<<"Sorted order:";
for(i=0;i<10;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
void Sort(int *a, int n){
int i,j,k,tool;
for(i=0;i<n;i++){
k=i;
for(j=i;j<n;j++){
if(a[j]<a[k])
k=j;
}
tool=a[k];
a[k]=a[i];
a[i]=tool;
}
}

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

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

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

实例代码1.3:

#include<iostream>
using namespace std;
int main(){
void Sort(int a[],int n);
int a[10],i;
cout<<"Please input 10 interges: "<<endl;
for(i=0;i<10;i++){
cin>>a[i];
}
Sort(&a[0],10);
cout<<"Sorted order:";
for(i=0;i<10;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
void Sort(int a[], int n){
int i,j,k,tool;
for(i=0;i<n;i++){
k=i;
for(j=i;j<n;j++){
if(a[j]<a[k])
k=j;
}
tool=a[k];
a[k]=a[i];
a[i]=tool;
}
}

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

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

实例代码1.4:

#include<iostream>
using namespace std;
int main(){
void Sort(int a[],int n);
int a[10],i;
cout<<"Please input 10 interges: "<<endl;
for(i=0;i<10;i++){
cin>>a[i];
}
Sort(&a[0],10);
cout<<"Sorted order:";
for(i=0;i<10;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
void Sort(int *a, int n){
int i,j,k,tool;
for(i=0;i<n;i++){
k=i;
for(j=i;j<n;j++){
if(a[j]<a[k])
k=j;
}
tool=a[k];
a[k]=a[i];
a[i]=tool;
}
}

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

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. MySQL 基础理论面试题整理

    前言: 之前整理公司面试题的时候,看了一篇大神些 SQL 优化之六脉神剑 文章,写的真好! 博主有一些 MySQL 的面试题,简单抽了一个备注一下,补充一下自己不熟悉的地方.   一.在MySQL中, ...

  2. atom总结

    window 系统 //查找 apm search emmet //安装 apm install emmet //删除  apm remove emmet

  3. 未定义的标示符“RECT”,引入了windows.h头文件也没有用?

    我用的是win8的vs2012,RECT应该引入什么头文件?windows.h我第一个就引入了,去windows.h里面搜也搜不到RECT这个关键字,应该引入哪个头文件呢? 真是奇怪啊,是不是还需要什 ...

  4. java 使用最新api操作mongodb

    // package com.auto.test.dbmodel; import java.util.ArrayList; import org.bson.Document;import org.bs ...

  5. http请求在asp.net中的请求过程

    当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll,ASPNET_ISAPI.dll会 ...

  6. git公钥生成以及与coding等联合

    更好用的 https://segmentfault.com/a/1190000002645623 其中 $ ssh -T git@github.comgitbub $ ssh -T git@git.c ...

  7. hihoCoder#1067(离线算法求LCA)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上上回说到,小Hi和小Ho用非常拙劣——或者说粗糙的手段山寨出了一个神奇的网站,这个网站可以计算出某两个人的所有共同祖先中 ...

  8. mybatis 学习四(下) SQL语句映射文件增删改查、参数、缓存

    2.2 select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id="getStudent" paramet ...

  9. Windows 常见进程

    alg.exe描述: alg.exe是Windows系统的一个重要进程,它的功能是用来处理 Internet 连接共享及防火墙,最好不要结束这个进程.taskmgr.exe描述: Windowsxp ...

  10. 如何将DevExpress的Gridcontrol导出到Excel

    private void simpleButton1_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog = new S ...