关于指针声明的c语法,我的问题很简单(我希望)。我完全知道如何声明一个指针,它的使用方式以及效果如何,如下所示。
int *val_ptr;
int val =99;
val_ptr = &val;
然而,令我困惑的是为什么当我们在C中声明一个指针时,我们使用* Indirection(value of)运算符?而不是&运营商的地址。如果我们声明一个指针,那么使用&这样做是没有意义的,因为我们正在声明一个地址吗?例如:
int & val_ptr;
int val =99;
val_ptr = &val;
我知道这是不正确的,但在我看来,这似乎更直观。我在*运算符的概念中缺少什么。我还没有找到一本教科书给我解释为什么,他们只是展示了如何。我知道怎么样,我想知道为什么。
感谢阅读。
答案 0 :(得分:4)
指针声明语法尝试模仿指针使用。当你有
int *ptr;
然后*ptr
的类型为int。
答案 1 :(得分:2)
宣言模仿使用。如果您有一个指向整数的指针并且想要访问指向的值,则可以使用*
运算符取消引用指针,如下所示:
x = *p;
表达式的类型 *p
为int
;因此,p
的声明应该是
int *p;
答案 2 :(得分:1)
当你写:
int *mypointer;
你可以想,“我声明(* mypointer)是一个int”(即“我的指针将引用一个int”),如下所示:
int (*mypointer);
现在看看,
int (&mypointer);
毫无意义。你在说什么? “我的指针值的地址是一个int”(这是真的,但这不是你的观点)。
答案 3 :(得分:0)
您不能使用&
运算符在C中声明指针。标准不允许这样做。当您在C中声明指针时:
int *val_ptr;
然后声明中的*
不是取消引用(间接)运算符。但是当这个*
出现在一个语句中时,它会执行间接。