代码1
main()
{
int i ,a[5];
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
yo(a);
for(i=0;i<5;i++)
{
printf("%d ",a[i]);
}
}
void yo(int a[5])
{
int i;
for(i=0;i<5;i++)
{
a[i]=a[i]+1;
}
}
在上面的代码中没有返回值(我在函数中返回void数据类型)数组&#39; a&#39;在主函数中进行了更新,但是当我不使用数组并使用普通的int数据类型时,值会更新,请参阅代码2
main()
{
int a;
a=50;
yo(a);
printf("%d",a);
}
void yo(int z)
{
z=150;
}
答案 0 :(得分:2)
这是因为数组a[]
作为指针传递,而不是数组的副本,并且数组被直接修改。如果将函数声明为
void yo(int *a)
将以完全相同的方式工作。但是如果你传递一个int
,例如
void yo(int a) {
a += 1;
}
该函数只接收int
的副本,并且不会影响调用者。要影响传递的变量,你可以
void yo(int *a) {
*a += 1;
}
猜猜是什么?这与我之前传递数组时的声明相同。传递指针时,可以将其视为数组,也可以视为单个值 - 即长度为1的数组。