龙空技术网

指针数组与数组指针

Lemon1号 109

前言:

此时我们对“数组指针和函数指针都是指针变量”都比较讲究,你们都想要了解一些“数组指针和函数指针都是指针变量”的相关知识。那么小编在网摘上收集了一些对于“数组指针和函数指针都是指针变量””的相关内容,希望小伙伴们能喜欢,朋友们快快来学习一下吧!

1.指针数组

即指针的数组,本质是一个数组,数组的每个元素都是指针变量

定义指针数组,含有4个元素,每个元素都是一个char *类型的指针,指向字符串

char *p[] = { "lemon","C language","hello world","=.=!" };

直接将p[0],p[1]等当作普通指针使用:

for (int i = 0; i < sizeof(p) / sizeof(char *); i++)//sizeof(p) / sizeof(char *)为求指针数组的元素个数

{

printf("%s\t", p[i]);

}

printf("\n");

for (int i = 0; i < sizeof(p) / sizeof(char *); i++)

{

do

{

printf("%c", *(p[i]));//p[i]表示第i个字符串的指针,外面加*代表取该指针指向的内容

p[i]++;//p[i]++表示指向该字符串的指针向后移动一位

} while (*(p[i]) !='\0');

printf("\n");

}

输出结果为:

2.数组指针

即指向数组的指针,本质是一个指针,指向一个数组

2.1一维数组

int a[10] = { 0 };//定义一个一维数组

定义数组指针的三种方式:

(1)先定义数组类型(使用typedef),再根据数组类型定义数组指针变量

typedef int A[10];//定义了一个数组类型A,该类型的数组有且只能有10个元素

A *p1 =NULL;//使用数组类型定义一个指针变量p1,初始化为NULL

p1 = &a;//使用&a,让p1指向整个数组,不能使用p1=a,a是首元素地址

//使用

for (int i = 0; i < 10; i++)

{

//p=&a

//*&a <==> a

//*p=*&a ==> (*p)[i]=a[i] ()与[]优先级相同,从左到右结合,*优先级较低

(*p1)[i] = i+1;

printf("%d ", (*p1)[i]);

}

输出结果为:

(2)先定义数组指针类型,再根据类型定义变量

typedef int(*P)[10];//定义了一个数组指针类型P

P p2 = NULL;//使用定义的数组指针类型P,定义了一个数组指针变量p2,初始化为空

//p2只能指向一个有10个元素的int型一维数组

p2 = &a;//将数组a的数组地址赋值给p2

//使用相同

for (int i = 0; i < 10; i++)

{

(*p2)[i] = i + 2;

printf("%d ", (*p2)[i]);

}

输出结果为:

(3)直接定义数组指针变量

int(*p3)[10] = &a;

//使用相同

for (int i = 0; i < 10; i++)

{

(*p3)[i] = i + 3;

printf("%d ", (*p3)[i]);

}

输出结果为:

2.2二维数组

int b[][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };//定义一个三行四列的二维数组

//定义一个指向一维数组的数组指针变量,并初始化为空

int(*p4)[4] = NULL;

p4 = b;//将二维数组b的第0行的首行地址赋给p4

//这里不能使用p4=&b,&b指的是整个二维数组,定义的是一维数组指针

//使用

for (int i = 0; i < sizeof(b) / sizeof(b[0]); i++)

//sizeof(b)是求整个数组的大小,sizeof(b[0])是求第0行的大小

//sizeof(b) / sizeof(b[0])即可得到数组有多少行

{

for (int j = 0; j < sizeof(b[0]) / sizeof(b[0][0]); j++)

//sizeof(b[0][0])是求第0行第0个元素的大小

//sizeof(b[0]) / sizeof(b[0][0])即可得到每行有多少个元素

{

printf("%d ", p4[i][j]);

//等价于printf("%d ", *(*(p4+i)+j));

}

printf("\n");

}

输出结果为:

关于b和&b的区别,p4[i][j]与*(*(p4+i)+j)等价的详细介绍

可见

标签: #数组指针和函数指针都是指针变量 #定义数组指针变量 #定义数组指针变量怎么定义 #数组指针和指针数组的赋值