数组和指针算术

时间:2014-12-10 11:09:06

标签: c arrays pointers

假设一个数组int a[10]

为什么我们不能a=a+1?但是同样的指针变量也是有效的。

int  *ptr = a;

ptr = a+1;

两种情景如何实际看到?

3 个答案:

答案 0 :(得分:2)

因为数组位置是常数。

您无法更改a的值,因为它代表数组的起始地址。移动它没有任何意义。

使用int *ptr;,您的变量ptr只是一个指针,当然可以设置为指向您喜欢的任何位置。

这里没有矛盾。它有点像函数,函数的名称求值为其地址(称为“函数指针”),但你也不能分配给它。

答案 1 :(得分:-1)

因为Array name是指向其第一个元素的常量指针。你不能改变常量变量的值,即,const关键字用于什么。

int a[10];      //here a (array variable is Const i,e you Cannot a=a+1)
int* const p=&a[0]; //here Also Same,Now p is Const i,e you Cannot p=p+1.

但是在这里:

int* pp=&a[0];//Here pp=pp+1 will work, Because pp is not Const.

答案 2 :(得分:-2)

如果数组是函数参数

可以
#include <stdio.h>

int rval(int a[10]) {
    a = a + 1;
    return a[0];
    }

int main(){
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
    printf ("%d\n", rval(a));
    return 0;
}

节目输出

1