指针系列目录
C语言指针基础知识点(一)–指针及指针变量
C语言指针基础知识点(二)–指针变量的引用
C语言指针基础知识点(三)–指针变量作为函数参数
C语言指针基础知识点(四)–通过指针引用数组
C语言指针基础知识点(五)–用数组名作函数参数
C语言指针基础知识点(六)–通过指针引用多维数组
C语言指针基础知识点(七)–通过指针引用字符串
C语言指针基础知识点(八)–返回指针值的函数
C语言指针基础知识点(九)–指针数组和多重指针
C语言指针基础知识点(十)–动态内存分配与指向它的指针变量
用数组名做函数参数
数组元素作实参时,参数传递具有单向性,即实参的改变可以影响形参,而形参的改变无法影响实参。例:
假设已经定义了一个函数,其原型为:
void swap(int x, int y);
假设函数的作用是将两个形参(x, y)的值交换,今有以下的函数调用:
swap(int a[1], int a[2]);
但是,
当数组名作函数参数时,实参和形参的改变可以相互影响。因为实参数组名代表首元素的地址,而形参是用来接收从实参传递过来的数组首元素的地址的,因此形参是一个指针变量。
int main()
{
void fun(int arr[], int n); //对fun函数的声明
int array[10];
......
fun(array, 10); // 用数组名作函数的参数
return 0;
}
void fun(int arr[], int n)
{
......
}
下面,把变量名作为函数参数与把数组名作为函数参数相互比较,可以得到:
实参类型 | 变量名 | 数组名 |
---|---|---|
要求形参的类型 | 变量名 | 数组名或指针变量 |
传递的信息 | 变量的值 | 实参数组首元素的地址 |
通过函数调用能否改变实参的值 | 不能 | 能 |
栗子1:
将数组 a 中 n 个整数按相反顺序存放
方法1:
# include<stdio.h>
int main()
{
void inv(int x[], int n);
int i, a[10];
printf("Please enter 10 integer numbers:\n");
for(i=0;i<10;i++)
scanf("%d", &a[i]);
inv