程序的输出

时间:2019-01-05 18:15:00

标签: c++ c

在此问题中,他们要求输出程序。这是一个基本代码,但是我不明白为什么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

3 个答案:

答案 0 :(得分:3)

在C语言中,所有参数都按值传递 ,这意味着它们的值被复制到参数变量中。当然,修改副本不会修改原始副本。这就是a不变的原因。

但是 对于指针来说同样如此,但传递指针(这是传递数组时的操作)只会复制指针而不是它指向的内容。这意味着函数s内部指向comp函数中的实际数组main。修改该数据会修改实际数据。

答案 1 :(得分:0)

x是局部变量。如果要更改它,可以将其返回或通过引用传递。

答案 2 :(得分:0)

值按值传递,即将数据的副本传递给f。 使用comp传递指向comp的指针,因此f可以更改comp的数据。