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

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

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

图示:

数组的大小:

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

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

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


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

数组地址与数组名

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

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


      #include <stdio.h>
      int main()
      {
         int a[5] = { 0 };
         printf("a = %p\n", a);
         printf("&a = %p\n", &a);
         printf("&a[0] = %p\n", &a[0]);
         return 0;
      }
  
 

数组的盲点:

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

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

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

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

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

实例3:


      #include <stdio.h>
      int main()
      {
         int a[5] = {0};
         int b[2];
         int* p = NULL;
          p = a;
         printf("a = %p\n", a);
         printf("p = %p\n", p);
         printf("&p = %p\n", &p);
         printf("sizeof(a) = %d\n", sizeof(a));
         printf("sizeof(p) = %d\n", sizeof(p));
         printf("\n");
          p = b;
         printf("b = %p\n", b);
         printf("p = %p\n", p);
         printf("&p = %p\n", &p);
         printf("sizeof(b) = %d\n", sizeof(b));
         printf("sizeof(p) = %d\n", sizeof(p));
          b = a;
         return 0;
      }
  
 

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

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

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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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