在原始变量名之前使用指针变量或使用&符号有什么区别?

时间:2014-06-27 01:47:26

标签: c

两个main()函数都做同样的事情,但我告诉它使用指针变量很重要。有人可以解释为什么我不能总是只使用&variableName来发送位置吗?

int swap_int(int *i1, int *i2)
{
    int t = *i1;
    *i1 = *i2;
    *i2 = t;
}

int main(void)
{
    int  v1 = 0;
    int  v2 = 37;
    int *p2 = &v2;
    printf("v1 = %d, v2 = %d\n", v1, v2);
    swap_int(&v1, p2);
    printf("v1 = %d, v2 = %d\n", v1, v2);
    return 0;
}

或者如果你这样做:

int main(void)
{
    int  v1 = 0;
    int  v2 = 37;

    printf("v1 = %d, v2 = %d\n", v1, v2);
    swap_int(&v1, &v2);
    printf("v1 = %d, v2 = %d\n", v1, v2);

    return 0;
}

1 个答案:

答案 0 :(得分:2)

与编程中的所有内容一样,一切都取决于您尝试处理信息的内容。

指针只是存储内存位置的数据类型。 &符运算符(&v1)获取存储特定变量中数据的内存地址。由于v1存储整数变量,& v1返回存储该整数的位置

那么,为什么我们要使用指针变量来包含该信息呢?例如,考虑用于遍历数组的指针算法或类似的技术。如果我们不首先通过将其分配给指针变量来复制内存位置(在您的一个示例int *p2 = &v2中),我们将通过递增或递减来破坏v2变量它;它不会再指向同一个位置了!

使用指针变量的另一个原因是可读性。当其他人正在阅读您的代码时,如果您在对它们执行操作之前将内存位置分配给指针变量,那么您将会更加明白。

如果您仍然对此感到困惑,请随时对此答案发表评论或向我发送消息,我很乐意与您讨论此事。指针作为一个概念真的很棘手!