CPP学习之——数组名与函数(14.12-13)

一 概述

本节主要讲述数组的内存地址和数组向函数传递参数

二 数组的内存地址

2.1 代码

1
2
3
4
5
6
7
8
9
#include<iostream>
using namespace std;
int main()
{
int a[4]={1,2,3,4};
cout<<a<<endl;
cout<<&a[0]<<endl;
return 0;
}

2.2 输出结果

1
2
0x22fe40
0x22fe40

三 数组向函数传递参数

3.1 普通变量和数组在函数参数传递时的不同

1
2
3
4
5
6
7
8
9
10
11
void a(int);//函数原型         void a(int);//函数原型
int main() int main()
{ {
int x; int x[20];
a(x);//调用函数 a(x);//调用函数
return 0; return 0;
} }
void a(int x)//函数定义 void a(int x[])//函数定义
{ {
//有一个x的副本 //无副本,只有一个数组x的内存地址
} }

3.2 说明

  • 数组因为通常都比较大,所以为了节省内存,C++规定数组在程序中只能有一个原本,由于这个原因,数组在函数中使不可能再创造一个副本的。那么数组该如何传递值给函数呢?
  • 从上一节课,我们知道在C++中声明数组时,系统会自动生成一个指向该数组的指针,而该指针通常指向数组第一个元素的内存地址。因此数组虽然不能将数值传递给函数,但是却能够将内存地址传递给函数。
  • 从下图中我们看到我们在定义数组x时,系统自动将内存地址传递给函数,然后在调用函数时,函数里的数组参数x通过该内存地址访问数组x

四 示例演示及结果输出

4.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
using namespace std;
void a(int x[])
{
x[2]=3;
}
int main()
{
int x[20];
a(x);
cout<<x[2]<<endl;
return 0;
}

4.2 输出结果

1
3