我目前正在学习C中的指针。我对指针的初始化感到困惑。我可能会问愚蠢的问题,但我只是想确保理解并正确地学习。
因此,要初始化指针:
int a = 3;
int *pointer = &a;
*pointer = 10;
OR
int a = 3;
int *pointer;
pointer = &a;
*pointer = 10;
到目前为止,我知道“*”声明指针类型。
*指针是指针指向的地址中任何值的值。
& 是内容的内存地址。
在第二种情况下我能理解'pointer =& a'。
但是,为什么我们在上面的第一种情况下设置* pointer =& a,因为 *指针代表该地址中的值?
为什么我们在初始化指针时使该指针中的值等于第一种情况下变量的地址?
答案 0 :(得分:8)
令人困惑的是,*pointer = 10
中的星号和int *pointer = &a
中的星号意味着两种不同的东西。
*pointer = 10
取消引用变量pointer
并将值10
分配给取消引用操作的结果。int *pointer = &a
将变量pointer
声明为int *
类型,并使用值&a
对其进行初始化。这里没有解除引用。星号用于提醒您 解除引用pointer
时将获得int
。换句话说,这声明pointer
使*pointer
为int
。答案 1 :(得分:4)
此:
int *pointer = &a;
实际上是一种速记,相当于:
int *pointer;
pointer = &a;
答案 2 :(得分:1)
你的问题可以用两种方式回答。
请注意: - " int * pointer = a"这并不意味着你要取消引用指针变量,这意味着你要通过指向"& a"来初始化指针变量。
int * pointer =& a;
和
int *指针; 指针=& a;
意味着同样的事情 int * pointer =& a;这可以被视为写这个
的捷径int * pointer;
指针=& a;