我是编程语言C的初学者。我正在使用示例代码在线工作,我正在尝试分析以下内容,
int x = 0, y = 16;
*x_ptr = &x
这是我想要确保我在语法上理解的第二行。我刚刚遇到了指针的概念,并试图在概念上破解那个坚果。那么我该如何阅读第2行的代码?
答案 0 :(得分:5)
您发布的代码不包含x_ptr
声明,但为了使代码有效,x_ptr
的类型必须为int**
:指向指向的代码一个整数。
表达式*x_ptr
表示x_ptr
指向的内容。由于x_ptr
是指向整数的指针,*x_ptr
是指向整数的指针。
由于x
是整数变量,&x
是该变量的地址。所以赋值正在做的是获取变量x
的地址并将其存储到x_ptr
指向的内存中。
答案 1 :(得分:2)
变量是存储位置。
存储位置存储值。
存储位置与类型相关联。
类型T的存储位置包含类型T的值。
存储位置不是值。
使用存储位置生成值会产生存储在存储位置的值。
将&
运算符应用于类型T的存储位置会产生一个值。值的类型是"指向类型T"。
将*
运算符应用于类型&#34的值;指向类型T&#34的指针;生成类型为T的存储位置。
根据这些事实,您可以推断出程序片段的含义。
然而,您给出的程序片段几乎肯定是一个错字。你的意思是说
int x = 0, *x_ptr = &x;
让我们以更长的形式写出来,以便于阅读。
int x;
int *x_ptr;
x = 0;
x_ptr = &x;
x
和x_ptr
是存储位置。第一个是int类型,第二个是指向int的类型指针。
零值被分配到位置x
。
&
运算符应用于存储位置x
,生成指向int的类型指针值。
该值已分配到存储位置x_ptr
。
如果你那么说
*x_ptr = 123;
然后*
获取存储在位置x_ptr
中的值并将指针转回存储位置 - x
- 然后将123存储到该存储位置。 x
现在是123
,而不是0
。
确保您拥有 solid 。这是了解所有C的关键。