[POINTERS ON C] 第八章数组

[POINTERS ON C] 第八章数组
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++)

你可能感兴趣的:([POINTERS ON C] 第八章数组)