zoukankan      html  css  js  c++  java
  • 第27课 数组的本质分析

    数组的概念:

    数组当中的元素没有名字,我们只能通过数组名和下标来访问数组中的元素。数组名a代表的是这5个存储空间的集合。代表的是这一段内存。

    数组的大小:

    示例程序:

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

    运行结果如下:

    当我们指定数组中的一部分元素之后,其他的元素就会被初始化为0,我们可以利用这个特性来讲数组全部初始化为0。做法为int a[5] = {0}; 我们将第一个元素初始化为0,其他的元素由编译器默认初始化为0。

    数组地址与数组名:

    数组的地址需要用取地址符&才能得到。数组首元素的地址与数组地址在值上是一样的,但是它们的意义却不相同。

    示例程序:

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

    运行结果如下:

    地址其实隐含两个概念,第一是起始地址,第二是长度。

    a表示第一个元素的起始地址,长度为4。

    &a表示数组的起始地址,长度为20。

     数组名的盲点:

    数组名可以看做是一个常量指针,但是使用起来并不是常量指针。

    示例程序:

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

    第27行是错误的,去掉错误行,编译运行。

    运行结果如下:

    sizeof对指针和数组名操作时,结果是不一样的。

    小结:

  • 相关阅读:
    AxWindowsMediaPlayer的详细用法
    C# 播放器控件的常用方法
    在 C# 中使用文件名启动应用程序
    备份和恢复Android手机的NAND分区
    刷Recovery的方法
    WPF RadioButton的探究,为啥选中一个其他都自动不选中了呢?
    WPF大牛Josh Smith 转投 iOS 的怀抱
    终端服务的剪贴板的缺陷,导致WPF调用Clipboard.SetText() 失败
    用df命令查看分区情况
    WPF与输入法冲突研究之二:TextInput事件的BUG?
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9538038.html
Copyright © 2011-2022 走看看