是读 《c与指针》 的笔记
依据个人理解水平而写,详略若不得当还请见谅
数组:
-
在绝大多数的表达式中:数组名的值是指向数组第一个元素的指针
例外:- sizeof(数组名)返回的是整个数组所占字节而不是第一个指针所占字节
- &数组名 返回一个指向数组的指针,而不是指向数组第一个元素的指针的指针
-
array [value] = *(array+(value));
- 指针表示法效率可能大于下标表示法,下标表示法不可能效率高于指针表示法
- 但下标表示法可维护性高
- 下表引用实际上只是间接访问表达式的一种伪装形式
-
声明
- 声明数组时,同时也分配了一些内存空间
- 声明指针时,只分配了用于容纳指针本身的空间
-
数组与函数:
- 当数组名作为函数参数调用时,传给函数的是指向数组第一个元素的指针
- 函数收到的是原参数的一份拷贝,所以对其进行操作不会影响实际参数
- 若想修改原先数组:使用指针参数执行间接访问操作1
-
字符数组
- 字符数组:
- char message[] = {‘H’,‘e’,‘l’,‘l’,‘o’};
- char message[] = “hello”;
- 字符串常量:
- char* message = “hello”;
- 字符数组:
-
多维数组
- 实际为一维数组的一种特型:它的每个元素本身也是一个数组
- 多维数组作为形参时必须显示指明第二维(和接下去所有维):只有第一维的长度可以被自动计算出来
-
指针数组
- int* api[ 10 ];下标优先级高于间接访问,所以这是一个存了十个指向整型的指针的数组
- 对于存储一系列字符串常量
- 声明矩阵: char const keyword[][9] = {};
- 声明指针数组:char const *keyword[] = {};
- 矩阵适用于长度差不多的一系列字符串,并且无需使用指针
- 指针适用于层次不齐的字符串,更紧凑
- 实际上除了巨大的表,两种方法 差别其实很小