第十章——数组和指针

数组初始化
当初始化列表中的值少于数组元素个数时,编译器会把剩余的元素都初始化为0;个数多于数组元素个数时,会视为错误

省略数组中括号中的数字,编译器会根据初始化列表中的项目来确定数组的大小。

days是数组
sizeof days是整个数组的大小
sizeof day[0]是数组中一个元素的大小

c不允许把数组作为一个单元赋给另一个数组,除了初始化外也不允许使用花括号列表的形式赋值

使用越界的数组下标会导致程序改变其他变量的值

c99之前,数组大小的定义只能在方括号中使用整型常量表达式

多维数组
float rain[5][12]//一个内含12个float类型元素的数组
int bos[10][20][30]//box内含10个元素,每个元素是内含20个元素的数组,这20个元素的数组中的每个元素是内含30个元素的数组

初始化多维数组
{
{4,3,1,2},
{5,6,7},//后面一个元素被初始化为0
{1,2,3,4}
};

数组名是数组首元素的地址
dates+2==&dates[2]//相同的地址
*(dates+2)==dateds[2]//相同的值

函数传入数组
可以把数组大小作为第二个参数
int sum(int *ar,int n)
int sum(int a[],int n)
在函数原型中可以省略数组名,在定义中不能省略参数名

指针求差:求差的两个指针分别指向同一个数组的不同元素,通过计算求出两元素之间的距离。差值的单位与数组类型的单位相同
不要解引用未初始化的指针,因为在创建一个指针的时候,系统只分配了储存指针本身的内存,并未分配储存数据的内存,因此,在使用指针之前,必须先用已分配的地址初始化它

const
int sum(const int ar[],int n)//const并不是要求原数组是常量,而是该函数在处理数组时将其视为常量,不可更改。
const double *pd=rates;//指向const的指针不能用于改变值
把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的
double *const pc=rates;//声明并初始化一个不能指向别处的指针
const double *const pc=retes;//该指针不能更改它所指向的地址,也不能修改指向地址上的值

指针和多维数组
int zippo[4][2];
zippo//二维数组首元素的地址(每个元素内含两个Int类型元素的一维数组,与zippo[0]的区别是,zippo是一个占用两个int大小对象的地址,zippo[0]是一个占用一个int大小对象的地址,但是值是相同的)
zippo+2//二维数组的第三个元素(即一维数组)的地址
*(zippo+2)//二维数组的第三个元素(一维数组)的首元素(一个int类型的值)地址
*(zippo+2)+1//二维数组的第3个元素的第2个元素地址
((zippo+2)+1)//二维数组的第三个一维数组元素的第2个int类型元素的值,即zippo[2][1]
*zippo与&zippo[0][0]等价

指向多维数组的指针
int (*pz)[2];//pz指向一个内含两个Int类型的数组
声明一个指向N维数组的指针时,只能省略最左边方括号中的值int sum2(int ar[][12][20][30],int rows);

变长数组
允许使用变量表示数组的维度
int quarters=4;
int regions=5;
double sales[regions][quarters];
变长数组必须是自动存储类别,而且不能在声明中初始化它们。
int sum(int rows,int cols,int ar[rows][cols])

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王蒟蒻

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

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

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

打赏作者

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

抵扣说明:

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

余额充值