为什么在从n格式说明符中获取值时需要使用&符号?

时间:2015-02-21 20:38:20

标签: c syntax

为什么在从n格式说明符中获取值时需要使用&符号?

例如:

...
int n;
printf("%s: %nFoo\n", "hello", &n);

%npointer to an integer type

&符号是一个地址,为什么它将格式说明符的结果转换为上例中的整数?

2 个答案:

答案 0 :(得分:3)

%n说明符给出了到目前为止打印的字符数,因此它是输出值,您添加运算符的&地址,以将地址传递给值{ {1}}因此可以在n内修改它,当printf()返回时,它通过使用指向它的指针在printf()变量中存储了字符数。

如何修改函数中的值的示例是

n

,输出结果为

void setValue(int *where, int howMuch)
{
    if (where == NULL)
        return;
    *where = howMuch;
}

int main()
{
    int value;

    setValue(&value, 8);
    /*       ^ here is where the & address of is important */
    printf("%d\n", value);

    return 0;
}

请注意,在c中,没有8 ,因此修改函数中变量的唯一方法是传递它的地址并从函数中访问指针。

答案 1 :(得分:1)

C中的函数参数始终是值。知道表达式n的当前值不会给printf任何信息来存储新值。 printf需要知道的是 来存储结果。该问题由指针回答,具体而言,指向您希望存储结果的对象的指针n