c - 按值传递-不按我想要的方式执行

标签 c

我不明白C中传值的概念。这是我的函数:

void add(int x){
   x = x+1;
}

当我调用该函数时:

int y=3; 

add(y);

但是当我编译时,我仍然得到3。有人告诉我它与传值有关,但我仍然不明白?谁能解释为什么?

最佳答案

按值传递创建参数的副本。函数中改变的就是这个副本

void add(int x){
   x = x+1;
}

因此,您所做的更改是对副本进行的,而不是对 main 作用域中的变量(您希望看到更改)进行的。

如果您想通过将变量作为参数传递来更改函数内的变量,则不能按值传递。您可以将函数更改为通过指针传递,如下所示

void add(int* x){
   *x = *x + 1;
}

并将整数的地址传递给这样的函数

int y=3;
add(&y);

main()

指针仍然按值传递,因此它是正在操作的指针的副本,但这并不重要,因为您没有更改指针本身,而是更改了它指向的变量的值。

关于c - 按值传递-不按我想要的方式执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31393493/

相关文章:

c++ - GCC 如何处理宏中的引号?

c - 在堆栈中间查找元素

c - Strncpy 在字符串末尾给出不需要的字符

C静态变量和linux fork

c - Pango文本标记语言如何与GTK框一起使用?除 gtk 标签外

C - 复制到结构中仅返回文件每一行的最后一个元素

c - 如何在 C 中将 unsigned int 转换或转换为 int?

c - 如何区分union的内容

c - Switch 语句执行不止一种情况 - C 编程

c - 当我们重新给 char 指针赋值时,内存会发生什么?