• 2015-11-26 数组基础听课笔记


    1、关于数组的大小:

    在C语言中声明一个数组时需要指定其大小(柔性数组除外),数组的大小有两种指定的方式:

    a、显式指定数组大小

    eg:int a[5]={1,2};

    即在声明数组的时候,就在数组的长度方括号[]内填写数组的长度,这种方式就是显式的指定数组大小的方式。

    b、隐式指定数组大小

    eg:int b[] ={1,2};

    即在声明数组时,不在方括号内填写数组长度,但在后面给数组初始化值,这时候数组的长度就是花括号{}内所有元素的个数。

    2、关于数组的初始化:

    这个时候,有人不禁要问了,在我们显式指定数组大小时,int a[5]={1,2};既然声明了数组长度为5,前两个元素分别为1和2,那么剩下的元素的值是什么呢?

    有人会说,剩下元素的值是随机值,我们经过试验证明,这种说法是不对的,剩下的元素的值都为0。

    那么假如我们这样进行显式指定数值长度呢?int a[5];

    老师在linux下运行的结果,显示数组里面的元素的值都是随机的,而我在vs下运行发现数组元素的值全为0。反正不管怎样,这样就说明,以上这种声明数组的方式,数组里面的元素的值是不确定的。

    那么我们在声明数组的时候就要对其进行初始化操作。那么怎么进行初始化操作呢?

    我们就利用刚才我们说过的数组的第一个特性。假如我们显式的声明数组的长度的时候,同时给数组里面的一些元素赋初始值,那么剩下的元素的值就会被初始化为0。

    那么这里我们就应该这样来进行初始化:例如我们要定义一个数组c,数组里面有100个元素,但是我们现在也不知道数组里面的元素是什么,所以我们想要就里面的元素的值全部初始化为0。

    int c[100]={0};

    这样,我们将第一个元素初始化为0,那么剩下的元素也就会被初始化为0了。

    3、关于数组的一些说明:

    a、数组名仅代表数组首元素的地址,而不是数组的地址。

    b、数组的地址需要用取地址符&+数组名才能得到。

    c、数组首元素的地址与数组的地址的相同。

    d、数组首元素的地址与数组的地址是两个不同的概念。

    4、数组名的盲点:

    a、数组名在某些情况下可以看做(只能是看做)一个常量指针,但是数组名不是指针

    b、数组名“指向”的是数组中首元素的起始位置。

    c、在表达式中,数组名只能作为右值使用。

    d、只有在下列场合,数组名不能看做常量指针:

        i、数组名作为sizeof 的操作数。sizeof(数组名)得到的是整个数组所占的内存空间大小。

        ii、数组名作为&运算符的操作数。&数组名得到的是数组的地址。

    思考:

    int a[5];

    int b[5];

    a=b;

    在C语言中为什么不用以上这种方式复制数组?

    //在表达式中数组名只能作为右值使用。

    5、实例分析:

    another.c:

    char *p = "Hello~World";

    tst.c:

    #include <stdio.h>

    extern char p[];

    int main()

    {

    printf("%s ",p);

    return 0;

    }

    编译器处理指针和数组的不同之处:

    在处理指针时:编译器需要做一次寻址操作。在本例中编译器需要对指针p里面存放的地址进行寻址操作。

    在处理数组时,编译器直接取数组里面存放的数据,而不是把数组里面存放的内容当做地址再去进行寻址操作。

    6、小结:

    a、数组在内存中是一片连续的内存空间。

    b、数组的地址和数组首元素的地址的意义不同。//你家的GPS地址和你家所在楼栋的GPS地址相同,但是意义不一样。

    c、数组名大多数情况下被当成常量指针处理。

    d、数组名其实不是指针,在进行外部声明的时候(就像我们上面提到的例子)不能混淆。

  • 相关阅读:
    1026. 程序运行时间(15)
    C语言字符串/数组去重
    1025. 反转链表 (25)
    1024. 科学计数法 (20)
    1023. 组个最小数 (20)
    1022. D进制的A+B (20)
    1021. 个位数统计 (15)
    1020. 月饼 (25)
    前端001/正则表达式
    SSM001/构建maven多模块项目
  • 原文地址:https://www.cnblogs.com/wan0807/p/4998307.html
Copyright © 2020-2023  润新知