【问题标题】:Why Can't we use a instead of &a to store value of variable a in C programming lang? [duplicate]为什么我们不能使用 a 而不是 &a 在 C 编程语言中存储变量 a 的值? [复制]
【发布时间】:2018-10-11 06:21:36
【问题描述】:
void main()
{
int a;

printf("Enter a value to store :");

scanf("%d",&a) ;  // Why Can't we use a instead of &a to store value of variable a ???

printf("value of a is %d", a) ;
printf("\naddress of a is %d", &a) ;
getch() ;
}

【问题讨论】:

标签: c user-input


【解决方案1】:

因为在 C 中函数调用中的参数是按值传递的。如果你只是给它a,那么就没有办法实际存储一个值。当然,它可以更改函数中的a,但它只更改了值的副本,而不是原始值。它甚至不想要那个值,它不想写一个值。因此,它需要的是一个值的地址,因此它可以使用该地址将新值写入那里。

为什么我们不能使用 a 而不是 &a 来存储变量 a 的值

好问题!您想到的是一个称为“按引用传递”的概念,并且某些编程语言实际上就是这样做的。在那里,您传递的a 将与a 相同,而不仅仅是它的副本,因此如果写入,原件也会被更改。例如,在 C++ 中:

int a = 1;
void increase(int& myInt) {
    myInt++;
}

int main() {
    increase(a);
    printf("%d\n", a);
    return 0;
}

这里打印了2,因为增加了原来的a。如果函数签名中没有与符号,1 将被打印,因为只有副本被修改。

【讨论】:

  • @EricPostpischil 函数调用中的参数。抱歉不清楚,我将其添加到答案中。由于我有一些疑问,我想仔细检查一下,似乎犹他大学正在努力解决这个问题......cs.utah.edu/~germain/PPS/Topics/C_Language/c_functions.html
  • 您能否解释一下为什么我们不使用 & [pass by value] 来处理 printf()。请和谢谢!
  • printf 不会修改您给它的变量,因此它完全可以复制并且不需要指针或对原始文件的引用。例外是当您要打印字符串时,它需要一个指向字符串中第一个字符的指针。例如,如果char buf[32] 是我的字符串,我可以使用printf("string: %s", &buf[0])。或者只是printf("string: %s", buf)
猜你喜欢
  • 2011-08-10
  • 2015-01-17
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
相关资源
最近更新 更多