关于C语言数组的总结

前言

目前个人将C语言中数组归纳为8点,这里只将类型作以归纳,作一个整体把控,不会就某一类深入介绍,总结如下。

1.整型数组

int arr [10]

这就是一个以arr为数组名的整型数组,表示该数组可以存放10个int大小的数据。

  数组类型为:int  [10]

•  初始化

//完全初始化 
int arr[5] = {1,2,3,4,5};

//不完全初始化 
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0 

2.浮点型数组

浮点型数组分为两种,一种为单精度浮点型float,一种为双精度浮点型double

比如:float arr[3]表示可以存放3个单精度浮点型数据,double类型同理

  数组类型:float  [3]

•  初始化:float arr[3]={1.2 , 3.4 , 4.5};

注:

在C语言中,由于浮点数的精度问题,可能会出现浮点数比较不准确的情况,因此在进行浮点型      数组的比较时需要格外小心。
在使用浮点型数组时,需要注意数组的越界访问,这可能会导致程序出错。

3.字符型数组

如:char arr[10]

•  数组类型:char [10]

•  初始化

①逐个字符初始化:可以逐个字符为数组中的元素赋值。例如,char str = {'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'};。如果提供的字符个数小于数组长度,未被赋值的元素将自动设置为'\0'(空字符)。

②使用字符串常量初始化:可以使用字符串常量来初始化字符数组,系统会自动在字符串末尾添加'\0'作为结束符。例如,char str[] = "I am happy"; 或 char str[] = {"I am happy"};。这种方式下,数组的大小可以不指定,系统会根据字符串长度自动确定。

注:

①可以省略数组长度:在初始化字符数组时,如果提供了初始值,可以省略数组长度的指定,系统会根据初始值的个数自动确定数组大小。例如,char str[] = {'H', 'e', 'l', 'l', 'o'}; 或 char str[] = "Hello";。

②字符数组的赋值只能对其元素一 一赋值,不能直接将一个字符串赋值给字符数组变量。例如,char str[ ]; str = "I am happy"; 是错误的。

4.指针数组

  数组类型:int* [5]

•  初始化

 int arr1[] = {1,2,3,4,5};
 int arr2[] = {2,3,4,5,6};
 int arr3[] = {3,4,5,6,7};
 
//数组名是数组⾸元素的地址,类型是int*的,就可以存放在parr数组中
 
 int* parr[3] = {arr1, arr2, arr3};

5.函数指针数组

int ( *parr1[3] ) ()

parr1 先和 [] 结合,说明parr1是数组,数组的内容为  int (*)() 类型的函数指针

•  数组类型:int ( *[3] ) ()

•  初始化

 int add(int a, int b)
 {
    return a + b;
 }
 int sub(int a, int b)
 {
    return a - b;
 }
 int mul(int a, int b)
 {
    return a*b;
 }
 int div(int a, int b)
 {
    return a / b;
 }
 
 int main()
 {
    
    int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //函数指针数组的初始化
    
    return 0;

 }

6.结构体数组

如图 struct Stu arr[3]就是结构体数组

•  数组类型:struct Stu [3]

•  初始化:见上图

7.柔性数组

定义:C99定义在结构体中是最后一个元素且是未知大小数组叫做柔性数组成员,该数组为柔性数组。

typedef struct st_type
 {
 int i;
 int a[];//柔性数组成员
 
 }type_a

特点:

结构中的柔性数组成员前面必须至少有⼀个其他成员。

sizeof返回的结构体大小不包括柔性数组的内存。

包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

  sizeof返回的结构体大小不包括柔性数组的内存举例如下:

typedef struct st_type
 {
   int i;
   int a[0];//柔性数组成员
 
 }type_a;
 
 int main()
 {
  printf("%d\n", sizeof(type_a));//输出的是4 
  return 0;
 }
  

 柔性解释

Struct s
{
 int n;
 int arr[];

};

int main()
{
 Struct s* ps=(Struct*)malloc(sizeof(Struct s)+5*sizeof(int));
 return 0;

}

8.变长数组

变长数组其实并不是数组,而是一种特性

C99中给⼀个变长数组(variable-lengtharray,简称VLA)的新特性,允许我们可以使用变量指定 数组大小。

int n = a+b;
 int arr[n];

变长数组的根本特征:数组长度只有运行时才能确定,所以变长数组不能初始化。

注:变长数组的意思是数组的大小是可以使用变量来指定,但并不是说数组大小是可变的(柔性数组除外)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值