两个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;
}
答案 0 :(得分:2)
与编程中的所有内容一样,一切都取决于您尝试处理信息的内容。
指针只是存储内存位置的数据类型。 &符运算符(&v1
)获取存储特定变量中数据的内存地址。由于v1存储整数变量,& v1返回存储该整数的位置。
那么,为什么我们要使用指针变量来包含该信息呢?例如,考虑用于遍历数组的指针算法或类似的技术。如果我们不首先通过将其分配给指针变量来复制内存位置(在您的一个示例int *p2 = &v2
中),我们将通过递增或递减来破坏v2
变量它;它不会再指向同一个位置了!
使用指针变量的另一个原因是可读性。当其他人正在阅读您的代码时,如果您在对它们执行操作之前将内存位置分配给指针变量,那么您将会更加明白。
如果您仍然对此感到困惑,请随时对此答案发表评论或向我发送消息,我很乐意与您讨论此事。指针作为一个概念真的很棘手!