一维数组和指针

一维数组名数组和指针
★一维数组和数组元素的地址
数组名是一个地址常量
如:
float a[10],*p,x;
语句a=&x或a++这样是非法的,因为不能给a重新赋地址值,一旦定义a永远指向a数组的首地址
虽然不可以改变数组名a中的内容,但可以用对数组名加上一个整数的办法,来依次表达该数组中不同的地址。
如:
int a[10],*p;p=a+4~~~~~~~~~p=&a[4]
再如:
for(k=0;k<10,k++)
p=a+k;
在循环中并没有改变数组名a中的内容,但通过表达式,a+k逐一给出了a数组中每个元素的地址,使p依次指向a数组中和每一个元素。
如果要能过类似上面的语句给数组中的元素赋值,语句为:
for(k=0;k<10;k++)
scanf("%d",a+k);
如有p=a或p=&a[0]这两个表达式的意思是一样的。都是指指针p指向了数组a的首地址。所以当要依次访问数组中的每一个元素是可以用一下的两个形式:
p++;
或a+k(k的值是不断变化的,如上面的for语句一样)
★通过数组的首地址引用数组元素
a是数组元素的首地址,a(即a+0)的值即等于&a[0],则用a+1的值等于&a[1].
“间接访问运算符”----“ * ”来引用地址所在的存储单元。因此对于数组a[0]可以用表达式*&a[0]来引用,也可以用 (a+0),还可以用a[0]来表示。
但需要注意的是对于
(p+k)这样的表达式不能这样写*p+k,这样写的话就错了,代表指针取值后再加K的值

总结:表示数组元素s[i]的表达式应当有:
s[i]
*(s+i)
*(p+i)
*p[i]
(担当有p=s+2时,p=&a[2],*p[0])就是a[2]的值

发布了25 篇原创文章 · 获赞 0 · 访问量 248

猜你喜欢

转载自blog.csdn.net/m0_46170663/article/details/104267183