C语言数组

数组

数组概念

  • 数组是含有多个数据值的数据结构,并且每个数据值具有相同的数据类型

  • 每个数据被称为元素

  • 数据元素在内存中是存储到一片连续的内存中的

  • 定义数组

    • int a[10];
      
    • a为数组名

    • [10]代表数组中可以存放十个元素

    • int 代表数组中元素类型

    • 数组中元素类型必须一致

数组的初始化

  • 定义时赋值,被称为初始化

    • int a[5] = {1,2,3,4,5};
      
    • 从左到右赋值给每个元素

  • 可以只给部分元素赋值,被称为不完全初始化

    • int a[5] = {1,2};
      
    • 没有被初始化的元素值为0

  • 完全不初始化

    • 数组中的元素值是随机的
  • 可以给数组全部元素赋值,不需要定义数组大小

    • int a[]={1,2,3,4,5}
      

给数组赋值超过其容器大小的值会产生越界,其值仍会赋值给数组的下一个内存地址中,可能会破坏别的数据

数组的下标

  • 表示对第一个元素的偏移量
  • 所以下标从0开始

数组元素的引入

  • 数组必须先定义后使用
  • C语言规定,只能逐个引用数组元素,不能直接引用整个数组
  • 数组下标可以是整型常量或者整型表达式

二维数组

  • 数组进行嵌套

  • int a[2][3];
    
  • 一个有两个元素的数组,两个元素是一个有三个元素的数组

字符数组

  • 存放字符的数组称为字符数组

    char a[10] = {'a','b',....};
    
  • C语言中没有专门的字符串变量,没有string类型

  • 字符串是一系列连续的字符的组合,想要在内存中定位一个字符串,除了要知道他的开头,还有知道他的结尾

    • 在C语言中,字符串总是以’\0’结尾,'\0’被称为字符串结束标志,字符串结束符
    • ‘’\0’是 ASCII 码表中的第 0 个字符,英文称为 NUL,中文称为“空字符”。该字符既不能显示,也没有控制功能,输出该字符不会有任何效果,它在C语言中唯一的作用就是作为字符串结束标志。
    • C语言在处理字符串时,会从前往后逐个扫描字符,一旦遇到’\0’就认为到达了字符串的末尾,就结束处理。‘\0’至关重要,没有’\0’就意味着永远也到达不了字符串的结尾
    • 由" "包围的字符串会自动在末尾添加’\0’。例如,"abc123"从表面看起来只包含了 6 个字符,其实不然,C语言会在最后隐式地添加一个’\0’,这个过程是在后台默默地进行的,所以我们感受不到
  • 当用字符数组存储字符串时,要特别注意’\0’,要为’\0’留个位置;这意味着,字符数组的长度至少要比字符串的长度大 1

    • char str[7] = "abc123";
      /*2"abc123"看起来只包含了 6 个字符,我们却将 str 的长度定义为 7,就是为了能够容纳最后的'\0'。如果将 str 的长度定义为 6,它就无法容纳'\0'了。*/
      
    • C语言规定,可以将字符串自己赋值给字符数组

    • char s1[5] = {'a', 'b', 'c', 'd', 'e'};       // s1存放的是字符序列,非字符串
      char s2[6] = {'a', 'b', 'c', 'd', 'e', '\0'}; // s2存放了一个字符串 
      3char s[6] = {"abcde"}; // 使用字符串直接初始化字符数组
      char s[6] =  "abcde" ; // 大括号可以省略,这种形式更加简洁,实际开发中常用
      s[0] = 'A'; // 索引第一个元素,赋值为 'A'7 8//为了方便,你也可以不指定数组长度
      char str[] = "www.baidu.com"; 
      
    • 所谓字符串长度,就是字符串包含了多少个字符(不包括最后的结束符’\0’)。例如"abc"的长度是 3,而不是 4

变长数组

  • 用变量定义数组长度

  • 数组变量的长度必须用常量表达式进行定义。但是在 C99中,有时候也可以使用非常量表达式

  • 不可被初始化

    • 变量只有在运行时才会被赋值,赋值时才会开辟内存空间
    • 但初始化是在编译阶段被处理,变量没有值,无法判断数组大小
  • 数组一旦定义完成,其长度不可改变

  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值