C Primer Plus
第五版
第十章 数组和指针
数组:当数值数目少于数组元素数目时,多余的数组元素被初始化为0;
初始化数组时可以省略括号中数字 int ar[ ]={1,2,3}
C不支持把数组作为一个整体赋值,也不支持用花括号括起来的列表形式进行赋值(初始化时除外)
数组索引不能超过数组边界
变长数组:在一个函数中定义:int =4;int ar[ n ];合法
指针
指针:1、指针数值就是它所指向的对象的地址
2、指针前运用运算符*可以得到指针指向的对象的数值
3、对指针加1等价于对指针的值加上它指向的对象的字节大小,要是加一个整数就是指向的对象的字节乘这个整数后的和
4、可以用指针标识数组的每个元素并得到每个元素的数值
int sum(int ar[],int n)无论任何情况,int*ar 都表示ar是指向int的指针,形式int ar[]也可以表示,但只能是在是声明形式参量时可以使用
int sum(int *ar,int n) int sum(int * ,int ) int sum(int ar[],int n) int sum(int ar[],int ) 四种表示等价。
指针指向数值最后一个元素的下一个元素是合法的。
一元运算符*和++具有相同的优先级,但他们的结合顺序是从右到左
ar[i]==*(ar+i)等价
指针可以进行如下操作
1、赋值:可以把一个地址赋给指针通常为数组名或&
2、求值:运算符*可以取出指针指向的数值
3、取指针地址:指针变量同其他变量一样具有地址和数值
4、将一个整数加给指针,是指针的值加上指针指向的数据类型的字节数与整数相乘积的和
5、指针间可以求差值,一般是数值,表示两个元素间的距离
指针最基的功能在于同函数交换信息
int sum(const int ar[ ]);用const可以对数组进行保护
将常量或非常量数据的地址赋给指针是合法的
把 非const 指针赋给const 指针的变量是非法的
int (* pt)[4]一个指针指向4个int;
int sum(int ar[][],int n)非法声明
int sum(int ar[][4],int n) 合法声明
变长数组:在函数内部,或作为形式参量方可声明,不可进行初始化
int sum(int rows ,int cols,int ar[rows][cols])合法 int sum(int ,int ,int ar[*][*])合法
int sum(int ar[rows][cols],int rows ,int cols)非法
变长数组允许动态分配内存。