加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

简单的C指针澄清

发布时间:2020-12-16 10:50:33 所属栏目:百科 来源:网络整理
导读:我刚开始使用C语言中的指针而且我只是简单地挂了一些东西.我想确保我理解正确. 说我有这样的事情: int * buff; 从我读到的, * buff指的是buff当前指向的值 buff指的是地址 但我坚持的是: “buff”是指什么?它是指内存中的 buff的位置,它指向值* buff的位
我刚开始使用C语言中的指针而且我只是简单地挂了一些东西.我想确保我理解正确.

说我有这样的事情:

int * buff;

从我读到的,

* buff指的是buff当前指向的值
& buff指的是地址

但我坚持的是:

“buff”是指什么?它是指内存中的& buff的位置,它指向值* buff的位置?

谢谢你! :3

-jtsan

解决方法

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  ...

现在,暂时假装int是一个字节大小.你是一台八位电脑.将你的int写入其中一个框.方框下面的数字是它的地址.现在选择另一个框来包含int * b =& a. int * b也是存储在内存中某处的变量,它是一个包含& a的指针,发音为“a的地址”.

int  a = 5;
int *b = &a;
  a       b 
+---+---+---+---+---+--
| 5 |   |100|   |   | ...
+---+---+---+---+---+--
 100 101 102 103 104  ...

现在,您可以使用此模型直观地处理您看到的值和指针的任何其他组合.这是一个简化(因为正如语言学者会说,指针不一定是地址,内存不一定是顺序的,并且有堆栈,堆和寄存器等等),但这是一个非常好的类比,99%计算机和微控制器.

您也可以将模型扩展为真正的四字节整数…

int a = 5;
char b = 2;
  a   a   a   a   b
+---+---+---+---+---+--
| 0 | 0 | 0 | 5 | 2 | ...
+---+---+---+---+---+--
 100 101 102 103 104  ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读