c语言数组:一维数组,多维数组,字符数组,指针数组

一维数组

定义:
组成数组的元素是若干个独立的变量;
这些变量的数据类型必须相同;
变量之间有一定的数据关系。
数组类型
按数组元素类型不同,数组可分为数值数组、字符数组、指针数组、结构体数组等。
数组的形式:
<存储类型> <数据类型> <数组名> [<常量表达式>]
存储类型指的是:auto、register、static、extern,若省略相当于auto。
数据类型是:任意一种基本数据类型或构造数据类型。
数组名由字母数字下划线组成,但不能以数字开头。
方括号中的常量表达式是数组元素的个数或者数组的长度。
数组的引用:
数组名[下标]常量或整型表达式。
下标只能为整型
下标从0开始0~n-1,n为元素个数
数组的初始化:
(1)局部数组不初始化:普通局部数组,若定义时没有初始化则数组中元素的值是不确定的
(2)static数组不初始化:对于static修饰的数组,定义是没有初始化则数组中元素的值默认为0
(3)全局数组不初始化:对于全局数组,若定义时没有初始化,则数组中元素默认值为0
(4)全部初始化:(eg: int a[3]={1,2,3};)定义的时候就要初始化,不能定义完再赋值
(5)部分初始化:当{}中的值少于数组元素个数时,只给前面部分元素赋值
(6)数组全部赋值:(eg:int a[]={1,2,4,3,5,34};), 编译器会根据初始化列表自动计算数组元素的个数
(7)数组全部初始化为0(eg:int a[10]={0};)
数组中的元素不能整体赋值,只能单个赋值(eg:int a[10]=9;只是给这个数组的第一个元素赋值=9)
数组的内存分配
在内存中,数组中的元素占用连续的存储空间,并且根据单个元素所占存储空间来进行内存分配。数组名代表数组的起始地址,是地址常量,对数组名求sizeof,可以得出数组占用的总空间。
数组元素的个数=sizeof(数组名)/sizeof(数据类型)
在这里插入图片描述

多维数组

定义
具有两个或两个以上的下标的数组,就称为多维数组。
形式
<存储类型> <数据类型> <数组名> <常量表达式1> <常量表达式2>…<常量表达式n>
二维数组初始化
(1)降维给二维数组赋值,即按行初始化(全部初始化eg:int a[2][3]={{1,2,3},{4,5,6}};部分初始化eg:int a[3][3]={{1},{4}};第一行为1 0 0 第二行4 0 0 )
(2)按先行存储的方式给二维数组赋值(全部初始化eg:int a[2][3]={1,2,3,4,5,6};部分初始化eg:int a[3][3]={1,2};第一行为1 0 0第二行 2 0 0 第三行 0 0 0)
(3)可以省略左边下标范围的方式 ,给二维数组赋值(全部初始化省略第一维eg:int a[][3]={{1,2,3},{4,5,6}};第二维的长度不能省 )
二维数组内存分配
先存第一行再存第二行…
在这里插入图片描述
例子
int a[3][4]={{1,2,3,4},{5,6,7,8}};
a是二维数组名,是地址常量
a[0],a[1],a[2]是一维数组名,代表一维数组的起始地址,都是地址常量
a代表第一行的地址
a+1代表第二行的地址
a[0]代表元素a[0][0]的地址
a[0]+1代表元素a[0][1]的地址
a[1]+2代表元素a[1][2]的地址

字符数组

定义
有一定顺序关系的若干个字符变量的集合,就是字符数组。可以一维可以多维。
形式
eg:
char c[5];
char ch[2][3];
初始化
(1)和普通的数组相同,逐个为数组元素赋值
char ch[6]={‘a’,‘b’,‘c’,‘d’,‘e’,’\0’};
(2)使用字符串常量来为数组元素赋值
char ch[6]={“abcde”};
字符串以\0结尾,内存访问不能越界。

字符串

定义
字符串是指以’\0‘作为结束字符的一组字符,,在c语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串,因此把一个字符串存入数组时,也把结束符\0存进数组。

指针数组

定义
指针数组是指由若干个具有相同存储类型和数据类型的指针变量构成的集合。
形式
<存储类型> <数据类型> *<指针变量数组名> [<大小>]

eg:int *p[2];[]的优先级高于*)

指针数组的数组名是数组的起始地址。
由于数组元素是指针,数组名就是数组首元素的地址即数组名是指针的地址,是多级指针了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值