一维数组和数组元素的地址

举报
陈言必行 发表于 2021/08/13 23:23:01 2021/08/13
【摘要】   一维数组和数组元素的地址 前言:定义的数组名可以认为是一个存放地址值的指针变量名,其中的地址是数组第一个元素的地址,也就是数组所占一串连续存储单元的起始地址。重要的是:这个指针变量中的地址值不可改变,也就是说,不可以给数组重新复制。因此,也可以认为数组名是一个地址常量。 如:float a[10],*p,x; 语句 a = &x; 或者 a++;...

 

一维数组和数组元素的地址

前言:定义的数组名可以认为是一个存放地址值的指针变量名,其中的地址是数组第一个元素的地址,也就是数组所占一串连续存储单元的起始地址。重要的是:这个指针变量中的地址值不可改变,也就是说,不可以给数组重新复制。因此,也可以认为数组名是一个地址常量。

如: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+k逐一给出了a数组中的每个元素的地址,使p一次指向a数组中和每一个元素。

 

如果 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的首地址

 

 

例题:编写程序:通过给一个函数给主函数中定义的数组输入若干个大于等于0的整数,用负数作为输入结束标志,调用另一个函数中数组中的数据


 


  
  1. #include
  2. #define M 100
  3. void arrout(int *,int);
  4. int arrin(int *);
  5. int main()
  6. {
  7. ints[M],k;
  8. k=arrin(s);
  9. arrout(s,k);
  10. return 0;
  11. }
  12. int arrin(int *a)
  13. {
  14. inti,x;
  15. i=0;
  16. scanf("%d",&x);
  17. while(x>=0)
  18. {
  19. //a[a+i]=x;
  20. *(a+i)=x;
  21. i++;
  22. scanf("%d",&x);
  23. }
  24. return i;
  25. }
  26. void arrout(int *a,int n)
  27. {
  28. int i;
  29. for(i=0;i<n;i++){
  30. printf("M",*(a+i));
  31. }
  32. }

当数组名作为实参时,对于的形参除了是指针wait,还可以用另外两种形式。当上面的提莫中数组名作为实参时,函数的首部用的是指针(*a),还可以用以下形式调用:

arrin(int *a)

arrint(int a[])//[]中不传值,可以理解为自适应

arrint (int a[M]) //M指具体数组长度,基本不使用数组这种方式,因为如果M的值穿小了,会造成溢出。

 

 

 

 

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/76092149

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。