指针数组的定义:
一个数组,若其元素均为指针类型数据,称为指针数组,也就是说指针数组的每个元素都储存着一个地址,每个元素都相当于一个指针。
例如:char *a[4];:相当于定义了4个指针变量。而且最为重要的是,这4个指针变量的储存地址是相邻的,毕竟其本质还是一个数组,所以用起来及其方便。
用指针数组到底有什么便捷之处:
就我个人的理解指针数组主要为处理多个字符串时起到了极大的便捷,下面通过一个例子来讲解一下:
就例如:char* name[] = {“Fellow me”,“BASIC”,“Great Wall”},当我们需要对这三个字符串进行处理,例如排序,或者对字符串进行排序,输出甚至使用<string,h>里面的函数时,我们都可以直接使用name[0],name[1],name[2]代替上面的字符串,有的同学也许会问为什麽?因为指针数组储存的就是字符串的地址,而我们平时对字符处理时,实际上也是通过支付的地址进行处理的。
例如:<string.h>库函数中的strcmp(str1,str2);里面的str1,str2都为数组名,实际上也就时数组的首元素地址,又例如字符串输出函数printf("%s",str1);也是通过数组地址进行处理的,由此观之,指针数组的用处十分大;
下面通过一个例子讲讲使用指针数组的细节:
#include <stdio.h>
#include <string.h>
int main()
{
int i;
void sort(char* name[], int n);//定义参数为指针数组的函数
void print(char* name[], int n);//定义参数为指针数组的函数
char* name[] = { (char*)"Fellow me",(char*)"BASIC",(char*)"Great Wall",(char*)"FORTRAN",(char*)"Computer" };//这里为什麽要在个字符串前加char*,这是因为vs的版本问题
int n = 5;
sort(name, n);//注意当指针数组作参数时传递的是数组名应为数组名表示的是数组首元素的的地址也就是name[0]的地址
for (i = 0;i <= 4;i++)
{
printf("%s\n",name[i]);//注意着里是name[i],而不是*name[i],因为name[i]才表示字符串的首地址
}
return 0;
}
void sort(char* name[], int n)
{
char* temp;
int i, j;
for (i = 0;i < n - 1;i++)
{
for (j = i+1;j <= n - 1;j++)
{
if (strcmp(name[i], name[j])>0)//注意strcmp里的参数也是地址
{
temp = name[i];
name[i] = name[j];
name[j] = temp;
}
}
}
}
当然指针数组可以用2维度数组替换,但对字符串进行整体处理时没有指针数组好用。好,就先谈到这。