C语言问题:能否改变被调函数中实参的内容
在看《c语言与指针》这本书的时候,有段话看不懂在函数中对标量参数的任何修改都会在函数返回时丢失,因此,被调用函数无法修改调用函数以传值形式传递给他的参数。然而,当被调用函...
在看《c语言与指针》这本书的时候,有段话看不懂
在函数中对标量参数的任何修改都会在函数返回时丢失,因此,被调用函数无法修改调用函数以传值形式传递给他的参数。然而,当被调用函数修改数组参数的其中一个元素时,调用函数所传递的数组就会被实际的修改。
这句话是什么意思?求大神解释,最好能举个例子。万分感激 展开
在函数中对标量参数的任何修改都会在函数返回时丢失,因此,被调用函数无法修改调用函数以传值形式传递给他的参数。然而,当被调用函数修改数组参数的其中一个元素时,调用函数所传递的数组就会被实际的修改。
这句话是什么意思?求大神解释,最好能举个例子。万分感激 展开
展开全部
void func(int a){a=100;}
int a=10;
func(a);
printf("a=%d",a); // 仍然显示 a=10, 因为整型参数a在func()中是按值传递的, 也就是说func()仅使用a的值, 而对存储a的内存地址不加修改;
void func(int* a){ *a=100;}
int a=10;
func(&a);
printf("a=%d",a); // 显示 a=100, 因为整型参数指针a在func()中是按地址传递的, 也就是说func()使用a的存储地址, 直接修改其内容.
数组参数与指针参数相同, 均按地址传递.
int a=10;
func(a);
printf("a=%d",a); // 仍然显示 a=10, 因为整型参数a在func()中是按值传递的, 也就是说func()仅使用a的值, 而对存储a的内存地址不加修改;
void func(int* a){ *a=100;}
int a=10;
func(&a);
printf("a=%d",a); // 显示 a=100, 因为整型参数指针a在func()中是按地址传递的, 也就是说func()使用a的存储地址, 直接修改其内容.
数组参数与指针参数相同, 均按地址传递.
展开全部
在C语言中,
(1)变量做函数的形参时:
发生函数调用时,会分配临时内存单元,接收主调函数传来的值;函数调用结束后,形参的临时单元被释放。
比如:swap(int a,int b)
{int t;
t=a;a=b;b=t;}
main()
{int x=3,y=7;
swap(x,y);
printf("%d,%d\n",x,y);
}
此时输出为3,7。函数swap的调用并未改变实参的值。
(2)数组名做函数的形参时:
发生函数调用时,将数组的首地址传给形参,形参可以通过地址控制数组的单元,因此会改变实参数组的值。
比如:
swap(int a[ ])
{int t;
t=a[0];a[0]=a[1];a[1]=t;}
main()
{int x[2]={3,7};
swap(x);
printf("%d,%d\n",x[0],x[1]);
}
此时输出为7,3。函数swap的调用改变了实参数组的值。
(1)变量做函数的形参时:
发生函数调用时,会分配临时内存单元,接收主调函数传来的值;函数调用结束后,形参的临时单元被释放。
比如:swap(int a,int b)
{int t;
t=a;a=b;b=t;}
main()
{int x=3,y=7;
swap(x,y);
printf("%d,%d\n",x,y);
}
此时输出为3,7。函数swap的调用并未改变实参的值。
(2)数组名做函数的形参时:
发生函数调用时,将数组的首地址传给形参,形参可以通过地址控制数组的单元,因此会改变实参数组的值。
比如:
swap(int a[ ])
{int t;
t=a[0];a[0]=a[1];a[1]=t;}
main()
{int x[2]={3,7};
swap(x);
printf("%d,%d\n",x[0],x[1]);
}
此时输出为7,3。函数swap的调用改变了实参数组的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是说实参在函数内不是会被修改的。
比如 void example(int a)
你调用 example(value), 在该函数内使用的是value的一个副本, _value,不会对value本身做任何修改。
但是当数组作为函数参数时,就相当于指针的作用,而指针就是变量的地址,对指针指向空间的修改就是对原数组的修改。
比如 void example(int a)
你调用 example(value), 在该函数内使用的是value的一个副本, _value,不会对value本身做任何修改。
但是当数组作为函数参数时,就相当于指针的作用,而指针就是变量的地址,对指针指向空间的修改就是对原数组的修改。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int main(){
int a=0,b=1;
swap(a,b);
}
void swap(int a,int b);//实际是不能交换a和b的值的,是值传递
而
void f(int a[],int n){//这里a是数组首地址,所以可以更改数组里的值
}
int a=0,b=1;
swap(a,b);
}
void swap(int a,int b);//实际是不能交换a和b的值的,是值传递
而
void f(int a[],int n){//这里a是数组首地址,所以可以更改数组里的值
}
来自:求助得到的回答
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我手里没有C,用flash as2给你写一段你就明白了
var x:Number;
var y:Array;
x=0;
y=[1,2];
trace(x);trace(y); //这是执行函数前,返回0 1,2
dosth(x,y);
trace(x);trace(y); //执行后,返回0 1,3
function dosth(a:Number,b:Array){
a=1; //这个修改是无效的,不会影响原来的x值
b[1]=3; //这个修改 影响了y变量。
}
就是这样。
var x:Number;
var y:Array;
x=0;
y=[1,2];
trace(x);trace(y); //这是执行函数前,返回0 1,2
dosth(x,y);
trace(x);trace(y); //执行后,返回0 1,3
function dosth(a:Number,b:Array){
a=1; //这个修改是无效的,不会影响原来的x值
b[1]=3; //这个修改 影响了y变量。
}
就是这样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询