关于指针的困惑

时间:2014-08-22 09:16:27

标签: c

*p = &x; 谁能告诉我这句话的意思 实际上我每次都对此感到困惑。

#include <stdio.h>

int main()
{
    int x = 3;
    const int *p = &x;

    *p++;
    printf("%d\n", *p);
}

3 个答案:

答案 0 :(得分:0)

这里

int *p = &x;

表示p是指针(保存地址)被赋予变量x的地址,其为 int 类型(&amp; - &gt;给出地址)

如果您打印 p 的值,那么它将是一些像0047的地址(可以是任何东西,这只是一个例子)    如果您打印 * p 的值,那么您将获得 3

答案 1 :(得分:0)

*p = &x;    // this is not valid

const int *p = &x;

这里p是指向常数整数

的指针

答案 2 :(得分:0)

const int *p = &x;

相当于写作

const int *p;
p = &x;

在这两种情况下,您都声明了一个名为p的类型为“const int指针”的变量,并且您要为其分配int变量的地址。

在此之后,表达式 *p等同于表达式x

代码

*p++;
printf("%d\n", *p);

有一个错误。像++这样的后缀运算符的优先级高于*之类的一元运算符,因此*p++被解析为*(p++);你取消引用p++表达式的结果,它会增加指针,而不是指向的东西。 p会指向下一个int,所以如果您期望输出为4,您会感到失望。

为了增加指向的东西,你需要写(*p)++