C++用指针变量作为函数的参数接受数组的值的问题详细总结

 更新时间:2013年10月17日 09:24:28   作者:  
以下是对C++中用指针变量作为函数的参数接受数组的值的问题进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
实参和形参的四种结合方式
实参 形参 实例
数组名 数组名 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;
 }
}

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

相关文章

  • Linux下使用C/C++进行UDP网络编程详解

    Linux下使用C/C++进行UDP网络编程详解

    UDP 是User Datagram Protocol 的简称,中文名是用户数据报协议,是一种无连接、不可靠的协议,本文主要介绍了如何在Linux下使用C/C++进行UDP网络编程,有需要的可以了解下
    2024-10-10
  • C++ 实现求小于n的最大素数的实例

    C++ 实现求小于n的最大素数的实例

    这篇文章主要介绍了C++ 实现求小于n的最大素数的实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++中小数点输出格式(实例代码)

    C++中小数点输出格式(实例代码)

    下面小编就为大家带来一篇C++中小数点输出格式(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • C++11返回类型后置语法的使用示例

    C++11返回类型后置语法的使用示例

    本篇文章主要介绍了C++11返回类型后置语法的使用示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • C++控制台强化如何实现一定界面效果(简洁版)

    C++控制台强化如何实现一定界面效果(简洁版)

    这篇文章主要介绍了C++控制台强化如何实现一定界面效果(简洁版),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 详解QML 调用 C++ 中的内容

    详解QML 调用 C++ 中的内容

    这篇文章主要介绍了QML 怎么调用 C++ 中的内容,这里主要是总结一下,怎么在 QML 文件中引用 C ++ 文件里定义的内容,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • C++中使用正则匹配问题

    C++中使用正则匹配问题

    这篇文章主要介绍了C++中使用正则匹配问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 详解C/C++中new A与new A()的区别

    详解C/C++中new A与new A()的区别

    这篇文章主要通过一些简单的示例为大家详细介绍一下C/C++中new A与new A()的区别,文中的示例代码简洁易懂,快跟随小编一起学习起来吧
    2023-07-07
  • C语言手把手带你掌握带头双向循环链表

    C语言手把手带你掌握带头双向循环链表

    带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单
    2022-04-04
  • Qt利用QScroller实现home界面滑动效果

    Qt利用QScroller实现home界面滑动效果

    这篇文章主要为大家详细介绍了Qt如何利用QScroller实现home界面滑动效果,文中的实现过程讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-11-11

最新评论