假设一个数组int a[10]
。
为什么我们不能a=a+1
?但是同样的指针变量也是有效的。
int *ptr = a;
ptr = a+1;
两种情景如何实际看到?
答案 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