c语言基础——指针数组

指针数组

如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组。
除了每个元素的数据类型不同,指针数组和普通数组在其他方面都是一样的,下面是一个简单的例子:
int a = 10;
int b = 20;
int c = 30;
int d = 40;
int e = 50;
int* arr[5] = {&a, &b, &c, &d, &e};//数组内存放的是指针
	
int i;
for (i = 0; i < 5; i++)
{
	printf ("%p\n", arr[i]);//此处打印的是数组内存放的一些数据,即一些指针
}
	
for (i = 0; i < 5; i++)
{
	printf ("%d\n", *arr[i]);//用*可以取出数组内的指针指向的数据的值
}
定义一个指向指针数组的指针
  int **parr = arr;
parr 是指向数组 arr 的指针,确切地说是指向 arr 第 0 个元素的指针,它的定义形式应该理解为int *(*parr),括号中的*表示 parr 是一个指针,括号外面的int *表示 parr 指向的数据的类型。arr 第一个元素的类型为 int *,所以在定义 parr 时要加两个 *。

指针数组还可以和字符串数组结合使用,请看下面的例子:
char *p1 = "hello1";
char *p2 = "hello2";
char *p3 = "hello3";
char *p4 = "hello4";
char *p5 = "hello5";
	
char *arr[5] = {p1,p2,p3,p4,p5};
	
int i;
for (i = 0; i < 5; i++)
{
	printf ("%s\n", arr[i]);
}

需要注意的是,字符数组 str 中存放的是字符串的首地址,不是字符串本身,字符串本身位于其他的内存区域,和字符数组是分开的。
 
也只有当指针数组中每个元素的类型都是char *时,才能像上面那样给指针数组赋值,其他类型不行。

你可能感兴趣的:(c语言基础)