简单C指针澄清
我刚开始使用C语言中的指针,我对一些简单的东西很感兴趣。我想确保我理解正确 假设我有这样的东西:简单C指针澄清,c,pointers,C,Pointers,我刚开始使用C语言中的指针,我对一些简单的东西很感兴趣。我想确保我理解正确 假设我有这样的东西: int*buff 从我读到的 *buff指的是buff当前指向的值 &buff指的是地址 但我坚持的是: “buff”指的是什么?它是否指内存中&buff的位置,该位置指向值*buff的位置 非常感谢三, -jtsan您是正确的,*buff指的是buff指向的位置,而&buff指的是buff本身的地址。buff指向(*)的数据的地址(&)是*&buff,或者更常见的是buff 祝你好运。指针是相当棘
int*buff代码>
从我读到的
*buff指的是buff当前指向的值
&buff指的是地址
但我坚持的是:
“buff”指的是什么?它是否指内存中&buff的位置,该位置指向值*buff的位置
非常感谢三,
-jtsan您是正确的,*buff
指的是buff
指向的位置,而&buff
指的是buff本身的地址。buff
指向(*
)的数据的地址(&
)是*&buff
,或者更常见的是buff
祝你好运。指针是相当棘手的,但你看起来好像在正确的轨道上
*buff指的是buff当前指向的值
是
&buff指的是地址
否。如果你想的和我想的一样,至少不会&buff
不是指它当前指向的地址,&buff
是指buff
本身所在的内存地址
“buff”指的是什么
buff
指您认为的&buff
是什么,即buff
指向的地址。指针的值是指针指向的地址
以下是一些帮助您解决问题的示例:
int*buff代码>--声明指针
到int,而当前没有
指向任何地方
intfoo;buff=&foo代码>--将buff指向
富的地址
*buff=5代码>--更改
buff指向的内容(foo)到5
int**buff\u ptr=&buff代码>--声明
指向int的指针
并指向
浅黄色
鉴于声明:
int value = 13;
int *buff = &value;
你说得对:
*buff == 13
因为buff
指向value
并且包含13
您可能误解了&buff
所指的内容;它是变量buff
的地址,因此&buff
的类型是int**
,一个指向整数指针的指针。相反,&value
是变量value
的地址;它的类型为int*
(因此初始化不需要任何强制转换-它的类型正确,可以存储在buff
)
普通buff
是一个int*
或指向整数的指针。它包含变量值的地址。buff被声明为“指向int的指针”。使用*buff就像说“buff指向什么”,即int值。使用&buff就像说“buff的地址”,这是指向int(另一个间接层次)的指针的地址。int*
意味着“指向int的指针”。因此,在这里,buff
是指向int的指针。为了使事情更简单,我们还可以说:
int x = 5;
int *buff = &x;
x
,一个整数,被设置为5。
&x
表示“x的地址”。因此buff
包含x
的地址。为了便于讨论,假设x
存储在内存地址0x1000处。所以buff
本身也是一个数字:0x1000
*buff
表示“buff指向的对象”,在本例中为5
&buff
表示“buff地址”:数字buff
本身存储在内存中的地址
我想和大家分享一个我刚开始学习指针如何工作的一般技巧
拿一大张图表纸,纵向地放在你面前的桌子上。这是你电脑的内存。每个框代表一个字节。选择一行,并将数字“100”放在最左侧框的下方。这是内存的“最低地址”。(我选择100作为不是0的任意数字,您可以选择另一个。)按从左到右的升序为方框编号
+---+---+---+---+---+--
| | | | | | ...
+---+---+---+---+---+--
100 101 102 103 104 ...
a a b
+---+---+---+---+---+--
| 0 | 0 | 0 | 5 | 2 | ...
+---+---+---+---+---+--
100 101 102 103 104 ...
一元*
和&
运算符是彼此相反的。对于所有x
,*(&x)=x
总是正确的,对于所有有效指针x
,&(*x)==x
总是正确的(如果x
不是指针,则*x
没有任何意义,是语法错误;如果x
是无效指针,则*x
在语法上有效,但在运行时会导致未定义的行为).你能试着用更多的单词和更少的符号来表达你想说的吗?你是在暗示*
和&
相互否定吗?我担心当前的答案会让人困惑。谢谢你,这非常有帮助。:]
int a = 5;
int *b = &a;
a b
+---+---+---+---+---+--
| 5 | |100| | | ...
+---+---+---+---+---+--
100 101 102 103 104 ...
int a = 5;
char b = 2;
a a a a b
+---+---+---+---+---+--
| 0 | 0 | 0 | 5 | 2 | ...
+---+---+---+---+---+--
100 101 102 103 104 ...