一、指针数组的概念
一个数组的元素值为指针的数组是指针数组。
1)首先是一个数组,满足数组的属性和适用于数组的使用方法;
2)数组的每一个元素都是指针。
指针数组是一组有序的指针的集合。 指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。
二、指针数组的定义
指针数组说明的一般形式为:
数据类型说明符 *数组名[常量表达式];int *p[5]
这和定义数组(数据类型说明符 数组名[常量表达式];int p[5])的方式非常相似
#include <stdio.h>
int main(int argc, const char * argv[]) {
//声明一个数组a, a[0]~a[4], 都是int类型
int a[5];
//声明了一个指针类型的数组,p[0]~p[4], 每一个元素都是Int*类型。
int *p[5];
//p[0]~p[4], 都是float *类型。
float *p1[5];
return 0;
}
声明一个字符指针数组,分别指向特定字符,然后通过指针数组进行输出
#include <stdio.h>
int main(void)
{
char ch1 = 'a';
char ch2 = 'b';
char ch3 = 'c';
char *p[5] = {NULL};
p[0] = &ch1;
p[1] = &ch2;
p[2] = &ch3;
for (int i = 0; i < 3; i ++)
printf("%c", *(*(p + i)));
printf("\n");
return 0;
}
注意:指针数组使用时,每个元素均为一个指针,使用前需要初始化。
三、指针数组和二维数组
#include <stdio.h>
int main(int argc, const char * argv[]) {
//二维数组
char name[3][9] = {"zhangsan","lisi","wangwu"};
//指向字符串的指针数组
char *pname[3] = {"zhangsan","lisi","wangwu"};
//输出二维数组
for (int i = 0; i < 3; i ++)
{
printf("%s\n", name[i]);
}
//通过指针数组 pname 输出字符串
for (int i = 0; i < 3; i ++)
{
printf("%s\n", pname[i]);
}
return 0;
}