-2

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

int *val_ptr;
int val =99;

val_ptr = &val;

然而,令我困惑的是,为什么当我们在 C 中声明一个指针时,我们使用 * 间接(值)运算符?而不是运算符的 & 地址。如果我们声明一个指针,用 & 这样做是不是没有意义,因为我们声明了一个地址,对吗?例子:

int & val_ptr;
int val =99;

val_ptr = &val;

我知道这是不正确的,但在我看来这似乎更直观。我对 * 运算符的概念中缺少什么。我还没有找到一本可以解释原因的教科书,它们只是说明了如何。我知道怎么做,我想知道为什么。

谢谢阅读。

4

4 回答 4

4

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

int *ptr;

then*ptr是 int 类型。

于 2014-01-26T21:51:44.820 回答
2

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

x = *p;

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

int *p;
于 2014-01-26T22:51:56.827 回答
1

当你写:

int *mypointer;

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

int (*mypointer);

现在看,

int (&mypointer);

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

于 2014-01-26T22:00:22.783 回答
0

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

int *val_ptr;  

那么*在声明中不是解引用(间接)操作符。但是当它*出现在语句中时,它会执行间接。

于 2014-01-26T21:53:34.623 回答