C语言 数组的指针和指向数组的指针变量-2
一、数组名作为函数参数
如果一个实参的数组,想在函数中改变此数组的元素的值,实参和形参的对应关系可以有 4 种:
(1)实参和形参都是数组名
a 是实参数组首地址,那么ba是形参数组首地址,a和ba共用一段内存,也就是说,在调用changvalue()函数期间,a和ba指的是同一个数组。
#include<stdio.h>
void changevalue(int ba[])
{
ba[3]=27; //这是把内存赋值,所以这个值会被带回
ba[4]=45;
return;
}
int main()
{
int a[5]; //能引用的下标:a[0]-a[4]
a[0]=85;
a[1]=70;
a[2]=98;
a[3]=92;
a[4]=78;
printf("a[0]=%d,a[1]=%d,a[2]=%da[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
changevalue(a);
printf("-----------------------------------n");
printf("a[0]=%d,a[1]=%d,a[2]=%da[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
}
(2)实参用数组名,形参用指针变量
#include<stdio.h>
void changevalue(int *p)
{
//注意:这一定要知道数组a的数组元素范围是a[0]-a[4],所以只能引用到*(p+4)
*(p+2)=888; //相当于给a[2]赋值。p+2表示a[2]的地址,*(p+2)表示a[2]的值
return;
}
int main()
{
int a[5]; //能引用的下标:a[0]-a[4]
a[0]=85;
a[1]=70;
a[2]=98;
a[3]=92;
a[4]=78;
printf("a[0]=%d,a[1]=%d,a[2]=%,da[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
changevalue(a);
printf("-----------------------------------n");
printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
}
(3)实参和形参都用指针变量
#include<stdio.h>
void changevalue(int *p)
{
//注意:这一定要知道数组a的数组元素范围是a[0]-a[4],所以只能引用到*(p+4)
*(p+2)=888; //相当于给a[2]赋值。p+2表示a[2]的地址,*(p+2)表示a[2]的值
return;
}
int main()
{
int a[5]; //能引用的下标:a[0]-a[4]
a[0]=85;
a[1]=70;
a[2]=98;
a[3]=92;
a[4]=78;
printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
int *pa=a; //把数组a的首地址给 pa,然后传递pa过去【数组a的首地址就是a[0]的地址】
changevalue(pa); //实参是指针变量,则该指针变量必须有确定的值
printf("-----------------------------------n");
printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
}
(4)实参为指针和形参为数组名(把指针传递给数组名,那这个数组名就相当于这个数组的首地址)
理解为:把形参数组名也当成指针看待,是一个指向数组a的首地址的指针。
#include<stdio.h>
void changevalue(int ba[])
{
//注意:这里引用下标时,也不能超过main中定义的a数组,可引用的下标是a[0]-a[4]
ba[3]=987; //这是把内存赋值,所以这个值会被带回
ba[4]=465;
return;
}
int main()
{
int a[5]; //能引用的下标:a[0]-a[4]
a[0]=85;
a[1]=70;
a[2]=98;
a[3]=92;
a[4]=78;
printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
int *pa=a; //把数组a的首地址给 pa,然后传递pa过去【数组a的首地址就是a[0]的地址】
changevalue(pa); //实参是指针变量,则该指针变量必须有确定的值
printf("-----------------------------------n");
printf("a[0]=%d,a[1]=%d,a[2]=%d,a[3]=%d,a[4]=%dn",a[0],a[1],a[2],a[3],a[4]);
}
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
二维码