C语言:数组

1 一维数组

1.1 数组名

  • C语言中,数组名的值时一个指针常量,也就是第一个元素的地址。他的类型取决于数组元素的类型。
  • 数组名不完全等于指针。1)数组具有自己的属性,有确定的元素数量,编译器用数组名来记住这些属性;而指针仅是一个标量值。2)只有当数组名在表达式中使用时,编译器才会为它产生一个指针常量。(指针常量的值不能被修改,也就是说不能当作左值使用)
  • 两种情况数组名不是指针常量使用。1)sizeof,得到整个数组的字节数 2)&取地址
  • 数组赋值。必须要用循环一个一个赋值。
  • int * c;此处的c就是一个指针变量。

1.2 声明数组参数

函数原型中的一维数组形参无需写明它的元素数目,因为函数并不为数组参数分配内存空间,形参就是一个指针,指向已经分配好内存的地方,没有数组的属性。

1.3 初始化

  • 不完整初始化。缺省的值都初始化为0.
  • 自动计算数组长度。如果初始值的长度经常改变的话,这样写比较方便。
int array[]= {1,2,3,4,5};//此数组长度就是5个int
  • 字符数组初始化。
char array[] = "hello";//字符串最后是/0

2 多维数组

2.1 存储顺序

多维数组抽象可以理解为如下所示,
在这里插入图片描述
但是实际上内存中存储的是如下所示,
在这里插入图片描述

2.2 数组名

一维数组名是一个指针常量,指向的是数组的第一个元素。
二位数组名,指向的是第一个数组(一维数组)。

  • 下标
matrix[3][10];
matrix+1;//表示指向第二个数组
*(matrix+1;//指向第二个数组的第一个元素
*(matrix+1+5;//指向第二个数组的第6个元素
*(*(matrix+1+5);//第二个数组的第6个元素的值
//以上也可以写为
*(*(matrix[1]+5);

2.3 数组指针与指针数组

int matrix[10], *vp = matrix;
int matrix[3][10], *mp = matrix;//incorrect statement
//因为Matrix表示的是指向数组的指针,所以应该声明如下
int (*p)[10] = matrix;//由于括号的存在,所以P是一个指针,然后执行
//[],表示指针指向这个[10]数组。[]内的值不能为空
//同理,指针数组应该为,
int *p[10];//按照优先级先执行数组,然后再执行指针,所以这个是//数组指针

2.4 作为函数参数的多维数组

//一维数组
int vector[10];
func(vector)void func(int vector[]);//
//or
void func(int *vector);
//二维数组
int vector[3][10];
func2(vector);
void func2(int vector[][10]);
//or 
void func2(int (*p)[10]);

2.5 初始化

初始化时,花括号很重要,在花括号内省略掉后面几个元素。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值