声明C指针 - 为什么我们使用*而不是&

时间:2014-01-26 21:48:18

标签: c pointers value-of indirection

关于指针声明的c语法,我的问题很简单(我希望)。我完全知道如何声明一个指针,它的使用方式以及效果如何,如下所示。

int *val_ptr;
int val =99;

val_ptr = &val;

然而,令我困惑的是为什么当我们在C中声明一个指针时,我们使用* Indirection(value of)运算符?而不是&运营商的地址。如果我们声明一个指针,那么使用&这样做是没有意义的,因为我们正在声明一个地址吗?例如:

int & val_ptr;
int val =99;

val_ptr = &val;

我知道这是不正确的,但在我看来,这似乎更直观。我在*运算符的概念中缺少什么。我还没有找到一本教科书给我解释为什么,他们只是展示了如何。我知道怎么样,我想知道为什么。

感谢阅读。

4 个答案:

答案 0 :(得分:4)

指针声明语法尝试模仿指针使用。当你有

int *ptr;

然后*ptr的类型为int。

答案 1 :(得分:2)

宣言模仿使用。如果您有一个指向整数的指针并且想要访问指向的值,则可以使用*运算符取消引用指针,如下所示:

x = *p;

表达式的类型 *pint;因此,p的声明应该是

int *p;

答案 2 :(得分:1)

当你写:

int *mypointer;

你可以想,“我声明(* mypointer)是一个int”(即“我的指针将引用一个int”),如下所示:

int (*mypointer);

现在看看,

int (&mypointer);

毫无意义。你在说什么? “我的指针值的地址是一个int”(这是真的,但这不是你的观点)。

答案 3 :(得分:0)

您不能使用&运算符在C中声明指针。标准不允许这样做。当您在C中声明指针时:

int *val_ptr;  

然后声明中的*不是取消引用(间接)运算符。但是当这个*出现在一个语句中时,它会执行间接。