一、指针数组
1.什么是指针数组
指针数组是指一个数组,数组里面存放的元素是指针
2.指针数组的声明形式
指针数组的声明形式int *p[3]
3.指针数组的实质
指针数组的实质是声明了一个包含n个相同类型指针的数组,首先他是一个数组,其次数组存放的内容是指针
二、什么是数组指针
1.什么是数组指针
数组指针是一个指针,这个指针是一个指向数组的指针
2.数组指针的声明形式
指针数组的声明形式int (*p)[3]
3.数组指针的实质
数组指针是一个指向数组的指针,这个指针表示的是一个数组的起始地址,指向的数据类型是一个有长度指定的数组,即指针+n时,往前移动的长度是数组长度*n
4.什么时候使用数组指针
数组指针一般在二维数组中使用
三、指针数组和数组指针的区别与联系
1.指针数组是一个数组,数组指针是一个指针,这是最本质的区别
2.指针数组关心的是数组中指针的内容,数组指针关心的是指针指向的数组中的内容
3.指针数组和数组指针除了名字相似,两者所要表达的含义完全不同
四、代码示例
#include<stdio.h>
#include<string.h>
int main()
{
int i;
/*指针数组
*1:指针数组是指针的数组
*2:指针数组的声明形式int *p[3]
*3:指针数组的实质是声明了一个包含n个相同类型指针的数组
*
*/
/*输出结果
test1
p[0] = 1
p[1] = 2
p[2] = 3
*/
/*test1*/
int a,b,c;
a = 1;
b = 2;
c = 3;
int *p[3];
p[0] = &a;
p[1] = &b;
p[2] = &c;
printf("test1\n");
for(i = 0; i < 3; i++)
printf("p[%d] = %d\n", i, *p[i]);
/*数组指针
*1: 数组指针是一个指向数组的指针,这个指针表示的是一个数组的起始地址,
指向的数据类型是一个有长度指定的数组,即指针+n时,往前移动 整个数
组长度*n
*2: 数组指针的声明形式char (*p)[3]
*3: 数组指针通常用于指向二维数组使用,以便于二维数组的访问
*4: test2将一个数组指针指向一个int型的二维数组
*5: test3将一个数组指针指向一个char型的二维数组
*/
/*输出结果
test2
p1[0][0] = 0
p1[0][1] = 1
p1[0][2] = 2
p1[0][3] = 3
p1[0][4] = 4
p1[0][5] = 5
p1[1][0] = 100
p1[1][1] = 101
p1[1][2] = 102
p1[1][3] = 103
p1[1][4] = 104
p1[1][5] = 105
test3
parr[0] = I
parr[1] = love
parr[2] = 优快云
*/
/*test2*/
int arr1[2][6];
int (*p1)[6];
for(i = 0; i < 6; i ++)
arr1[0][i] = i;
for(i = 0; i < 6; i ++)
arr1[1][i] = i+100;
p1 = arr1;
printf("test2\n");
int j;
for(i = 0; i < 2; i++)
{
for(j =0; j < 6; j++)
printf("p1[%d][%d] = %d\n", i, j, *(p1[i]+j));
}
/*test3*/
char arr[3][20];
char (*parr)[20];
strcpy(arr[0], "I");
strcpy(arr[1], "love");
strcpy(arr[2], "优快云");
parr = arr;
printf("test3\n");
for(i = 0; i < 3; i++)
printf("parr[%d] = %s\n", i, parr[i]);
}