【问题标题】:Why don't I need ampersands with the scanf? (In C)为什么我不需要scanf的&符号? (在 C 中)
【发布时间】:2012-05-18 06:51:09
【问题描述】:
void getnums(int *a, int *b);

int main()   
{  
    int a;
    int b;
    int c;
    getnums(&a,&b);
    c = a + b;
    printf("a + b = %d\n", c);
    return 0;  
}

void getnums(int *a, int *b)
{ 
    printf("a:? ");
    scanf("%d", a);
    printf("b:? ");
    scanf("%d", b);
}

为什么我在 scanfs 中的 a 和 b 之前不需要 & 符号? (代码目前有效。)

【问题讨论】:

  • 如果您不喜欢与号,请尝试将所有变量定义为 1 大小的数组 :) int i[1]; scanf("%d", i); (*i)++; printf("%d\n", *i);

标签: c function pointers scanf ampersand


【解决方案1】:

每当我们scan 某个输入时,它需要一个内存位置(即地址)来存储该值,对于简单的变量,我们必须使用& - 与号 - 来提供该地址。

这里,函数getnumsab是指针,所以它们已经包含地址,所以不需要写&来给出地址。

【讨论】:

    【解决方案2】:

    因为scanf 将指针作为其参数(以便它知道要修改哪个变量),而ab 已经是指针。

    【讨论】:

    • 因为下面这行?:void getnums(int *a, int *b)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2012-03-20
    • 2017-11-23
    相关资源
    最近更新 更多