C语言学习第21篇---数组的本质剖析

举报
CodeAllen 发表于 2021/10/30 00:37:40 2021/10/30
【摘要】 数组是相同类型的变量的有序集合 图示: 数组的大小: 数组在一片连续的空间内存空间中存储元素 数组元素个数可以显示或隐式指定   实验1:数组的初始化实验 #include <stdio.h> int main(){ int a[5] = {1, 2}; int b[] = {1, 2...

数组是相同类型的变量的有序集合

图示:

数组的大小:

数组在一片连续的空间内存空间中存储元素

数组元素个数可以显示或隐式指定

 

实验1:数组的初始化实验


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[5] = {1, 2};
  5. int b[] = {1, 2};
  6. printf("a[2] = %d\n", a[2]);
  7. printf("a[3] = %d\n", a[3]);
  8. printf("a[4] = %d\n", a[4]);
  9. printf("sizeof(a) = %d\n", sizeof(a));
  10. printf("sizeof(b) = %d\n", sizeof(b));
  11. printf("count for a: %d\n", sizeof(a)/sizeof(int));
  12. printf("count for b: %d\n", sizeof(b)/sizeof(int));
  13. return 0;
  14. }

 

数组地址与数组名

  • 数组名代表数组首元素的地址
  • 数组的地址需要取地址符&才能看到
  • 数组首元素的地址 值和数组的地址值相同
  • 数组首元素的地址与数组的地址是两个不同的概念

实验2:数组名和数组地址


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[5] = { 0 };
  5. printf("a = %p\n", a);
  6. printf("&a = %p\n", &a);
  7. printf("&a[0] = %p\n", &a[0]);
  8. return 0;
  9. }

 

数组的盲点:

数组名可以看做一个常量指针

数组名“指向"的是内存中数组首元素的起始位置

数组名不含数组的长度信息

在表达式数组名不能看做常量指针

  • 数组名作为sizeof操作符的参数
  • 数组名作为&运算符的参数

 

实例3:


  
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[5] = {0};
  5. int b[2];
  6. int* p = NULL;
  7. p = a;
  8. printf("a = %p\n", a);
  9. printf("p = %p\n", p);
  10. printf("&p = %p\n", &p);
  11. printf("sizeof(a) = %d\n", sizeof(a));
  12. printf("sizeof(p) = %d\n", sizeof(p));
  13. printf("\n");
  14. p = b;
  15. printf("b = %p\n", b);
  16. printf("p = %p\n", p);
  17. printf("&p = %p\n", &p);
  18. printf("sizeof(b) = %d\n", sizeof(b));
  19. printf("sizeof(p) = %d\n", sizeof(p));
  20. b = a;
  21. return 0;
  22. }

小结:指针难就难在概念的不清晰

  • 数组是一片连续的内存空间
  • 数组的地址和数组首元素的地址意义不同
  • 数组名在大多数情况下被当成常量指针的处理
  • 数组名其实并不是指针,不能将其等同于指针

 

 

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/80463008

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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