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;
 }
}

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

相关文章

  • Qt实现简单UDP通信

    Qt实现简单UDP通信

    这篇文章主要为大家详细介绍了Qt实现简单UDP通信,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C语言与java语言中关于二维数组的区别

    C语言与java语言中关于二维数组的区别

    这篇文章主要介绍了C语言与java语言中关于二维数组的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Qt无边框窗口拖拽和阴影的实现方法

    Qt无边框窗口拖拽和阴影的实现方法

    这篇文章主要给大家介绍了关于Qt无边框窗口拖拽和阴影的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • VC++的if语句应用范围分析

    VC++的if语句应用范围分析

    这篇文章主要介绍了VC++的if语句应用范围分析,对VC++初学者有很好的参考学习价值,需要的朋友可以参考下
    2014-08-08
  • 浅谈c语言中转义字符的用法及注意事项

    浅谈c语言中转义字符的用法及注意事项

    下面小编就为大家带来一篇浅谈c语言中转义字符的用法及注意事项。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • C语言数据结构之二叉树详解

    C语言数据结构之二叉树详解

    二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式。本文将通过示例详细讲解一下二叉树,需要的可以参考一下
    2022-03-03
  • C++ std::array实现编译器排序

    C++ std::array实现编译器排序

    这篇文章主要介绍了C++ std::array实现编译器排序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • 最长公共子字符串的使用分析

    最长公共子字符串的使用分析

    本篇文章是对最长公共子字符串的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++人工模拟栈实现方法

    C++人工模拟栈实现方法

    在本篇内容里小编为大家整理了关于C++人工模拟栈实现方法和步骤,需要的朋友们可以学习下。
    2018-12-12
  • 浅谈C++的几种从键盘输入方式

    浅谈C++的几种从键盘输入方式

    今天小编就为大家分享一篇浅谈C++的几种从键盘输入方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07

最新评论