9.5 数组的指针和指向数组的指针变量-2
- 一.数组名作为函数参数
- (1)实参和形参都是数组名
- (2)实参用数组名,形参用指针变量
- (3)实参和形参都用指针变量,这个和(2)很类似
- (4)实参为指针,形参为数组名
- 二.整理来源
一.数组名作为函数参数
如果一个实参的数组,想在函数中改变此数组的元素的值,实参和形参的对应关系可以 有4种:
(1)实参和形参都是数组名
a是实参数组首地址,那么ba是形参数组首地址,a和ba共用一段内存,也就是说,在调用changevalue期间,a和ba指的是同一个数组。
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] = %d,a[3] = %d,a[4] = %d",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] = %d",a[0],a[1],a[2],a[3],a[4]);
return;
}
(2)实参用数组名,形参用指针变量
void changevalue(int *p)
{
//这里要注意,一定要指定数组a的数组元素范围是a[0]-a[4],这意味着你最多能够引用到的是*(p+4)
*(p+2) = 888; //等价于给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] = %d",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] = %d",a[0],a[1],a[2],a[3],a[4]);
return;
}
(3)实参和形参都用指针变量,这个和(2)很类似
void changevalue(int *p)
{
//这里要注意,一定要指定数组a的数组元素范围是a[0]-a[4],这意味着你最多能够引用到的是*(p+4)
*(p+2) = 888; //等价于给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] = %d",a[0],a[1],a[2],a[3],a[4]);
int *pa = a; //把数组a的首地址给pa,然后传递pa过去(定义时初始化)
changevalue(pa); //实参是指针变量,则该指针变量必须有确定的值。
printf("-------------------------------------------------------------------------\n");
printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);
return;
}
(4)实参为指针,形参为数组名
把指针传递给数组名,那这个数组名就相当于这个数组的首地址。
换一种理解方式:把形参数组名也当成指针看待,是一个指向数组a的首地址的指针。
void changevalue(int ba[])
{
//这里要注意,ba引用数组下标时也不能超过main中定义的a数组,可引用数组元素范围是a[0]-a[4]
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] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);
int *pa = a; //把数组a的首地址给pa,然后传递pa过去(定义时初始化)
changevalue(pa); //实参是指针变量,则该指针变量必须有确定的值。
printf("-------------------------------------------------------------------------\n");
printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);
return;
}
二.整理来源
整理至https://appd872nnyh9503.pc.xiaoe-tech.com/index的笔记