我的程序返回 4 而不是预期值 40

Tap*_*ami -5 c

#include <stdio.h>
    
int value(int *a);
    
int main(){
    int num = 4;
    value(&num);
    printf("value of number is = %d", num);
    return 0;
}

int value(int *a){
    int c = (*a)*10;
    return c;
}
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我在函数中传递了地址,但它没有改变,为什么?

pm1*_*100 5

有两种方法可以让函数在其外部更改数据:可以通过引用传递变量并更新它,或者可以返回一个值并使用该值。相反,您将每种方法混合一半。我重新排序了代码以使我的评论更清晰。

#include <stdio.h>

int value(int *a);

// here you are passing by reference, good
int value(int *a){
    int c = (*a)*10; // but you don't change a
    return c;  // instead you return a new value
}

int main(){
    int num = 4;
    value(&num); // but here you ignore the new value. 
    printf("value of number is = %d", num);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

要使参考方式发挥作用,您需要:

#include <stdio.h>
    
void value(int *a);
    
int main(){
    int num = 4;
    value(&num);
    printf("value of number is = %d", num);
    return 0;
}

void value(int *a){
    *a = (*a)*10; // change the value that a points at
    // no need to return anything
}
Run Code Online (Sandbox Code Playgroud)

或使返回方式正常工作:

#include <stdio.h>
// no need to pass by reference
int value(int a);
    
int main(){
    int num = 4;
    num = value(num); // use value return by function
    printf("value of number is = %d", num);
    return 0;
}

int value(int a){
    int c = a * 10;
    return c;
}
Run Code Online (Sandbox Code Playgroud)

  • @pm100 迂腐一点,C 标准实际上将 string 定义为以 NULL 字符结尾的字符序列。 (2认同)