C语言中,数组和指针有何本质不同之处?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2685个文字,预计阅读时间需要11分钟。
在C++语言中,数组引用主要是以指针的形式使用的,实际上存在于一种与数组定义完全相同的上下文环境中。因此,给家长带来一个误区,认为指针和数组应该是可以互换的。实际上,这种观点是错误的。
简单地讲,数组就是数组,指针就是指针,它们之间没有任何关系,只是经常穿着相似的衣服来迷惑你罢了。因此,“数组和指针是相同的”这种说法是危险的,是不完全正确的。
回顾前面对于左值和右值的讨论,编译器为每个变量分配一个地址(左值),这个地址在编译时可知,而且该变量在运行时一直保存于这个地址。相反,存储于变量中的值(右值)只有在运行时才可知。如果需要用到变量中存储的值,编译器就发出指令从指定地址读入变量值并将它存于寄存器中。
这里需要注意的是,由于编译器为每个变量分配一个地址(左值),这个地址在编译时可知,因此,如果编译器需要一个地址(可能还需要加上偏移量)来执行某种操作,它就可以直接进行操作,并不需要增加指令首先取得具体的地址。
本文共计2685个文字,预计阅读时间需要11分钟。
在C++语言中,数组引用主要是以指针的形式使用的,实际上存在于一种与数组定义完全相同的上下文环境中。因此,给家长带来一个误区,认为指针和数组应该是可以互换的。实际上,这种观点是错误的。
简单地讲,数组就是数组,指针就是指针,它们之间没有任何关系,只是经常穿着相似的衣服来迷惑你罢了。因此,“数组和指针是相同的”这种说法是危险的,是不完全正确的。
回顾前面对于左值和右值的讨论,编译器为每个变量分配一个地址(左值),这个地址在编译时可知,而且该变量在运行时一直保存于这个地址。相反,存储于变量中的值(右值)只有在运行时才可知。如果需要用到变量中存储的值,编译器就发出指令从指定地址读入变量值并将它存于寄存器中。
这里需要注意的是,由于编译器为每个变量分配一个地址(左值),这个地址在编译时可知,因此,如果编译器需要一个地址(可能还需要加上偏移量)来执行某种操作,它就可以直接进行操作,并不需要增加指令首先取得具体的地址。

