为什么我们使用“&”在初始化指向整数的指针时整数变量之前?

时间:2017-10-29 08:02:10

标签: c pointers syntax

我目前正在学习C中的指针。我对指针的初始化感到困惑。我可能会问愚蠢的问题,但我只是想确保理解并正确地学习。

因此,要初始化指针:

int a = 3;
int *pointer = &a;
*pointer = 10;

OR

int a = 3;
int *pointer;
pointer = &a;
*pointer = 10;

到目前为止,我知道“*”声明指针类型。

*指针是指针指向的地址中任何值的值。

& 是内容的内存地址。

在第二种情况下我能理解'pointer =& a'。

但是,为什么我们在上面的第一种情况下设置* pointer =& a,因为 *指针代表该地址中的值?

为什么我们在初始化指针时使该指针中的值等于第一种情况下变量的地址?

3 个答案:

答案 0 :(得分:8)

令人困惑的是,*pointer = 10中的星号和int *pointer = &a中的星号意味着两种不同的东西。

  1. *pointer = 10取消引用变量pointer并将值10分配给取消引用操作的结果。
  2. int *pointer = &a将变量pointer声明为int *类型,并使用值&a对其进行初始化。这里没有解除引用。星号用于提醒您 解除引用pointer获得int。换句话说,这声明pointer使*pointerint

答案 1 :(得分:4)

此:

int *pointer = &a;

实际上是一种速记,相当于:

int *pointer;
pointer = &a;

答案 2 :(得分:1)

你的问题可以用两种方式回答。

  1. 当你声明一个类型的指针,比如说int时,你会这样做" int * pointer"所以这意味着你要声明一个integer类型的指针,但是当你这样做时,#int; int * pointer = a",这意味着你正在通过指向一个地址来初始化指针变量(指针)。
  2. 请注意: - " int * pointer = a"这并不意味着你要取消引用指针变量,这意味着你要通过指向"& a"来初始化指针变量。

    1. int * pointer =& a;

      int *指针; 指针=& a;

    2. 意味着同样的事情 int * pointer =& a;这可以被视为写这个

      的捷径

      int * pointer;

      指针=& a;