C语言数组和指针的差别

数组和数组指针在使用上有一些区别,本节使用的vector数组和pv指针定义如下:

int vector[5] = {1, 2, 3, 4, 5};
int *pv = vector;

vector[i]生成的代码和*(vector+i)生成的不一样,vector[i]表示法生成的机器码从位置vector开始,移动i个位置,取出内容。而*(vector+i)表示法生成的机器码则是从vector开始,在地址上增加i,然后取出这个地址中的内容。尽管结果是一样的,生成的机器码却不一样,对于大部分人来说,这种差别几乎无足轻重。

sizeof操作符对数组和同一个数组的指针操作也是不同的。对vector调用sizeof操作符会返回20,就是这个数组分配的字节数。对pv调用sizeof操作符会返回4,就是指针的长度。

pv是一个左值,左值表示赋值操作符左边的符号。左值必须能修改。像vector这样的数组名字不是左值,它不能被修改。我们不能改变数组所持有的地址,但可以给指针赋一个新值从而引用不同的内存段。

考虑如下代码:

pv = pv + 1;
vector = vector + 1; // 语法错误

我们无法修改vector,只能修改它的内容。不过,vector+1表达式本身没问题,如下所示:

pv = vector + 1;

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程