如果一个实参的数组,想在函数中改变此数组的元素的值,实参和形参的对应关系可以 有4种:
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;
}
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;
}
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;
}
把指针传递给数组名,那这个数组名就相当于这个数组的首地址。
换一种理解方式:把形参数组名也当成指针看待,是一个指向数组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的笔记