1. 一维数组
数组名的值是一个指针常量
只有当数组名在表达式中使用时,编译器才会为它产生一个指针常量
int array[9];
sizeof(array) : 数组 a 的大小9,不是指针的长度
&array : 指向数组的指针,不是某个整型数的指针
6[array] : 与array[6]相等;*(6+array)
2. 字符串复制
void
strcpy(char *buffer, char const *string)
{
while( (*buffer++ = *string++) != '\0')
;
}
3. 数组和指针
int strlen( char *string );
int strlen( char string[] );
4. 初始化
静态数组自动初始化
初始化用 {}
字符数组初始化
char message[] = { 'H', 'e', 'l', 'l', 'o', 0};
char message[] = "Hello";
5. 多维数组
下标引用只是间接访问表达式的一种伪装形式
int matrix[3][10];
int (*p)[10] = matrix;
matrix[1][5] = *( *( matrix +1 ) +5 )
matrix是一个指向数组的指针
6. 指针数组
int
*api[10];
char const *keyword[] = {"do", "for", "return", NULL};
sizeof(keyword) / sizeof(keyword[0]) :
元素个数
#include <string.h>
int
lookup_keyword( char const * const desired_word, char const *keyword_table[], int const size )
{
char const **kwp;
for( kwp = keyword_table; kwp < keyword_table+size; kwp++)
if(strcmp(desired_word, *kwp) == 0)
return kwp - keyword_table;
retrun -1;
}
改进:for( kwp = keyword_table; *kwp != NULL; kwp++)