在此问题中,他们要求输出程序。这是一个基本代码,但是我不明白为什么a
的值没有变化,而comp
的值却变化了?
void f( int x, char s[]){
int i;
for(i=0;s[i];i++) s[i]--;
x--;
}
int main()
{
int a =5;
char comp[] = "ibm";
f(a,comp);
printf ("%d %s", a, comp);
return 0;
}
输出:5 hal
答案 0 :(得分:3)
在C语言中,所有参数都按值传递 ,这意味着它们的值被复制到参数变量中。当然,修改副本不会修改原始副本。这就是a
不变的原因。
但是 对于指针来说同样如此,但传递指针(这是传递数组时的操作)只会复制指针而不是它指向的内容。这意味着函数s
内部指向comp
函数中的实际数组main
。修改该数据会修改实际数据。
答案 1 :(得分:0)
x
是局部变量。如果要更改它,可以将其返回或通过引用传递。
答案 2 :(得分:0)
值按值传递,即将数据的副本传递给f
。
使用comp
传递指向comp
的指针,因此f
可以更改comp
的数据。