一.指针数组
1.概念:如果数组的各个元素都是指针类型,用于存放内存地址, 那么这个数组就是指针数组。
2.一维指针数组定义的一般格式为: 类型名 * 数组名[数组长度] ;
3.例:
int main(void)
{
int i, flag = 0; char ch;
const char *color[5] = {"red", "blue", "yellow", "green", "black" };
printf("Input a letter: "); ch = getchar();
for(i = 0; i < 5; i++)
{
if( *color[i] == ch )
{
puts( color[i] );
flag = 1;
}
}
if(flag == 0)
printf("Not Found\n");
return 0;
}
color是一个指针数组,其中每个 数组元素都是一个字符指针,分别 指向代表颜色的字符串
color[i]表示第i个单词的首地址,而* color[i]是第i个单词的首字母。
二.二级指针
1.
1.语句 int (*pb) [6]; 定义了一个指针变量pb,它是一个 指向数组的指针,指向的是长度为6的int型数组。(二维数组)(多维数组实际上是数组的数组, 二维数组就是每个元素都是一个一维数组的数组。)
for( i= 0 ;i<3 ; i++ ,p++)
for( j= 0 ;j<4 ;j++ )
sum +=(*p)[j] ;
例:
#include <stdio.h>
int main()
{
int a[3][4]={ {1,2,3},{4,5,6} } ;
printf("%x\n" , a+1 ) ;
printf("%x\n" , *(a+1) ) ;
printf("%d\n", **(a+1) ) ;
printf("%d\n", *(*(a+1)+2) ) ;
return 0;
}
a+1是第1行的地址
*(a+1)是第1行首元素的地址
**(a+1)是第1行首元素的值
2.语句 int *p[5]; 定义了含有5个元素的一维数组p ,每个元素是一个指向整型对象的指针数组。
例:
int main(void) //指针数组实现字符串排序
{
int i , j , n=5;
char *ptemp , *name[5] = {"Li Ming","Wang LingLing","Li Lei","Yu Fang","Sun Xin"} ;
for(i = 1; i < n; i++)
for(j = 0; j < n-i; j++)
if(strcmp(name[j], name[j+1])>0)
{
ptemp = name [j] ;
name [j] = name [j+1] ;
name [j+1] = ptemp ;
}
for(i = 0; i < 5; i++)
printf("%s \n", name[i]);
}
name[j]和name[j+1]交换的是地址指向; 字符串在内存中的位置没有移动。