- 数组和指针不可替换情形:sizeof 和 &
2[array]等价于*(2+(array))等价于*(2+array)
,该表达式是合法的- 下标操作效率永远不大于指针操作
- 下标 [ ] 优先级高于 *
- 一维数组数组名是指向数组第一个元素的指针
- 多维数组数组名也是指向数组第1个元素的指针,但此时的第1个元素表示次级数组。例如,
int matrix[3][10]
,matrix指向第1行,matrix+1指向第2行,*(matrix+1)
是指向第2行第1个元素的指针,*(matrix+1)+5
是指向第2行第6个元素的指针,*(*(matrix+1)+5)
是第2行第6个元素. - 数组指针
- 本质为指针
- int (*p)[10]; p即为指向数组的指针,又称数组指针
- 指针数组
- 本质为数组
- 一个一维指针数组的定义:int *ptr_array[10]。
- 函数参数注意:
- 一维数组
int vector[10] 则可以用 func(int *vec) or func(vec[]);
- 多维数组
int matrix[3][10], 用func(int mat[][10]) or func( int (*mat)[10])
#include <stdio.h>
#include <stdlib.h>
char const *keyword[] = {
"do",
"for",
"if",
"regsister",
"switch",
"return",
"while",
"switch",
NULL
};
int lookup_keyword(char const * const desired_word,
char const *keyword_table[], int const size)
{
char const ** kwp;
int index = 0;
for ( kwp = keyword_table; *kwp != NULL; kwp ++)
{
if (strcmp(desired_word, *kwp) == 0)
return kwp - keyword_table;
}
}