使用& a和a之间有什么区别

时间:2017-05-02 21:57:57

标签: c

将数字读取到&aa

的区别是什么
int main(int argc, char** argv) {
    int a;

    printf("A:");
    scanf("%d",&a);
    printf("Address:%p\n",&a);
    printf("value A:%d",a);

    return (0);
}

有时候我会看到代码而不是读取变量它们读取到地址我知道变量只是内存而不是相同?我可以两个都做?或者有时我必须特别使用其中一种?

1 个答案:

答案 0 :(得分:2)

在C中,如果您希望函数修改对象的值(例如a调用中的scanf),则必须将指针传递给宾语。指针是任何计算结果为内存中对象的位置的表达式。在这种情况下,使用一元a运算符获取指向&的指针:

scanf( "%d", &a ); // write an integer value to a

您可以创建一个用于完全相同目的的指针变量:

int a;
int *p = &a;       // the object p stores the location of a
                   // p points to a

scanf( "%d", p );  // also writes an integer value to a through the pointer p
                   // note no & here because p is already a pointer type

如果您只想将对象的值传递给函数,则不会使用&运算符:

printf( "%d", a ); // write the value stored in a to standard output, 
                   // formatted as a decimal integer

如果你有一个指针,并且你想要指针指向的东西的值,你可以使用一元*运算符:

printf( "%d", *p ); // write the value stored in a to standard output,
                    // going through the pointer p

总结一下,

 p == &a  // int * == int *
*p ==  a  // int   == int