七、C数组的介绍

1、前言

        C语言中的数据类型包括基本数据类型和复合数据类型。前面介绍的整形、浮点型、字符型都是基本数据类型,而数组属于复合数据类型。

        基本数据类型是编程中最基础的数据类型,用于存储简单的数据值。复合数据类型则是由基本数据类型组合而成的数据类型,用于存储更复杂的数据结构。

2、数组的定义

(1)数组就是相同数据类型的多个数据放在一起。

(2)在C语言中要定义一个数组,需要指定元素的类型和元素的数量,如下所示:

// 数据类型  数组名[元素个数];
// type arrayName [ arraySize ]; 

int a[10];

(3)注意点:

  • 数据类型可以是任意有效的C数据类型。
  • 数组中的所有元素必须是同一种数据类型。
  • 元素个数不能为0,必须大于0的整数常量。

3、数组的初始化

3.1、定义时初始化 & 每一个元素单独初始化

(1)定义时初始化

int a[4] = {0, 5, 2, ,3};  

大括号 { } 之间的值的数目不能大于我们在数组定义时在方括号 [ ] 中指定的元素数目。如果你省略掉了数组的大小,数组的大小则为初始化时元素的个数。因此,如果:

int a[] = {0, 5, 2, ,3};  

您将创建一个数组,它与前一个实例中所创建的数组是完全相同的,元素个数为4个。

(2)每一个元素单独初始化

int a[4];  

a[0] = 0;
a[1] = 5;
a[2] = 2;
a[3] = 3;

3.2、完全初始化 & 不完全初始化

(1)完全初始化

int a[4] = {33, 24, 34, 23};

/* 定义数组同时初始化,则可以省略数组定义时[]中的元素个数。
 * C语言编译器会自动计算其元素个数,计算依据是初始化式中初始化元素的个数。
 * 由此可知,省略[]中数组元素个数只有一种情况,那就是后面的初始化式必须为完全初始化。
 */
int b[] = {0, 1, 2, 3, 4};    // 数组的元素个数为5

(2)不完全初始化

  • 不完全初始化式中的值从a[0]开始,依次向后赋值,不足的默认用0填充赋值。
  • 局部变量的数组,不初始化时,每一个元素的值是随机的。
int a[4] = {23, 34, 24};   // 不完全初始化
int a[4] = {23, 34};       // 不完全初始化
int a[4] = {23};           // 不完全初始化
int a[4] = {};             // 不完全初始化

int a[4];                  // 不初始化

4、数组的访问

(1)数组定时的时候作为整体定义,但是在使用时不能不作为整体使用,需要拆开使用数组中的各个元素。

(2)譬如定义数组 int a [4]; ,使用其中的四个元素,分别是a[0]、a[1]、a[2]、a[3],其中[]是数组的标志,[]中的数字叫做数组下标(index,索引),下标是我们访问数组中各个元素的指引。

(3)数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。

5、不同数据类型数组

(1)不同数据类型的一组数组合成不同类型的数组,如下所示:

int    a[5];        // 整形数组
float  a[5];        // 浮点型数组
double a[5];        // 双精度浮点型数组
char   a[5];        // 字符数组

(2)C语言程序中,变量的实质就是内存中的一个格子。当我们定义(创造一个变量)了一个变量后,就相当于在内存中得到了一个格子,这个格子的名字就是变量名,以后访问这个内存格子就使用该变量名就行了。这就是变量的本质。

(3)数据类型的实质是内存中格子的不同种类,譬如在32位机器上:

 数据类型占用内存空间
短整形格子(short) 2字节空间 16位
整形格子(int)4字节空间 32位
单精度浮点型格子(float)4字节空间 32位
双精度浮点型格子(double)8字节空间 64位
字符型格子(char)1字节空间 8位

6、获取数组长度

6.1、sizeof运算符

(1)计算数据类型的大小:占多少字节

printf("%d\r\n", sizeof(short));
printf("%d\r\n", sizeof(int));
printf("%d\r\n", sizeof(float));

(2)计算变量的大小:占多少字节

int a = 0;
prinf("d\r\n", sizeof(a));

char b = 0;
prinf("d\r\n", sizeof(b));

float c[4] = {};
printf("d\r\n", sizeof(c));   // 计算数组c大小,单位字节

6.2、计算数组长度:数组的元素个数

(1)数组长度可以使用 sizeof 运算符来获取数组的长度,例如:

int numbers[] = {1, 2, 3, 4, 5};
int length = sizeof(numbers) / sizeof(numbers[0]);

(2)举例

#include <stdio.h>

int main() {
    int array[] = {1, 2, 3, 4, 5};
    int length = sizeof(array) / sizeof(array[0]);

    printf("length = %d\n", length);

    return 0;
}

(3)使用宏定义

#include <stdio.h>

#define LENGTH(array) (sizeof(array) / sizeof(array[0]))

int main() 
{
    int array[] = {1, 2, 3, 4, 5};
    int length = LENGTH(array);

    printf("length = %d\n", length);

    return 0;
}

7、字符数组

7.1、字符数组的定义

(1)字符数组和其他数组定义上并无本质区别。

(2)字符数组中的元素可以理解为0~255的整数或者字符。

(3)字符与整数之间采用ASCII编码。

(4)char类型做整形时,范围是 -127~128;做字符时范围是 0~127。

char a[10];

7.2、字符数组的初始化

(1)赋值为字符

  • 在C语言中引用单个字符时,应该用单引号' ',例如'a'
  • 在C语言中引用字符串时,应该用" ",例如"abcde"
  • "abcde"实际上有6个字符,分别是'a' 'b' 'c' 'd' 'e' '\0'
  • '\0'是C语言中定义的字符串的结尾标志。所以,当c语言程序中使用"abcde"这种方式去初始化时,编译器会自动在字符'e'后面添加一个'\0'。
  • '\0' 这个字符是ASCII码表中的第一个字符,是不可见字符,也就是在屏幕上不可显示,程序中使用转义字符来表示,即'\0';它的编码值是0。
char a[5] = {'a', 'b', 'c', 'd', 'e'};

// 数组的元素个数为5,字符串结尾的'\0'存储不到数组中,但也不会发生数组越界,不会报错
char b[5] = "abcde"; 
  
// 数组的元素个数为6
char c[] = "abcde";  

// 定义时数组会越界,报错 
//char a[5] = "abcdef";          

(2)赋值为整数

char a[4] = {48, 49, 50, 51};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码织梦师小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值