数组和指针的区别,C语言数组和指针的区别

  • 内容
  • 评论
  • 相关

在 C 语言中,对数组的引用总是可以写成对指针的引用,而且也确实存在一种指针和数组定义完全相同的上下文环境。因此,给大家带来指针和数组应该是可以互换的错觉,大家也会自然地归纳并假定在所有的情况下数组和指针都是等同的。实际上,并非所有情况下都是如此。

简单地讲,数组就是数组,指针就是指针,它们之间没有任何关系,只是经常穿着相似的衣服来迷惑你罢了。因此,“数组和指针是相同的”这种说法是危险的,是不完全正确的。

回顾前面对于左值和右值的讨论,编译器为每个变量分配一个地址(左值),这个地址在编译时可知,而且该变量在运行时一直保存于这个地址。相反,存储于变量中的值(右值)只有在运行时才可知。如果需要用到变量中存储的值,编译器就发出指令从指定地址读入变量值并将它存于寄存器中。

这里需要注意的是,由于编译器为每个变量分配一个地址(左值),这个地址在编译时可知,因此,如果编译器需要一个地址(可能还需要加上偏移量)来执行某种操作,它就可以直接进行操作,并不需要增加指令首先取得具体的地址。示例代码如下所示:

char a[6]="hello";
...
c=a[i];

对于上面的示例代码,在定义数组 a 时,编译器就在某个地方保存了 a 的首元素的首地址,这里假设地址为 10000(即 a 是一个地址,编译器会为数组 a 分配一个空间,但不会为 a 本身分配空间),如图 1 所示。



图 1 对数组下标的引用

本文标题:数组和指针的区别,C语言数组和指针的区别

本文地址:https://www.hosteonscn.com/2745.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注