欢迎来到C语言的世界
博客主页:卿云阁
欢迎关注点赞收藏??留言
本文由卿云阁原创!
本阶段属于锻体阶段,希望各位仙友顺利完成突破
首发时间:2021年1月17日
??希望可以和大家一起完成进阶之路!
作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!
目录
0??指向一维数组的指针
1??指针数组
2??二维数组名作为数据的指针数组
文章图片
?
0?????指向一维数组的指针??? 指向一维数组的指针指向的类型类型是一个一维数组。定义一个指向一维数组的指针变量格式如下。
数据类型 (*指针变量名)[n];
意思是定义了一个指针变量,这个指针变量指向具有n个元素的一维数组,且这个一维数组中每个元素都是给定的数据类型。
1.ch指向由十个char类型的数据组成的一维数组
#include int main(void) {char str[3][10]={"123","456","789"}; char(*ch)[10]; ch=str+1; //ch可以赋值,str不能赋值 putchar(ch[0][1]); //ch[0]就相当于一维数组名str[1] putchar('\n'); ch=ch+1; //改变ch的值可以改变不同的数据 putchar(ch[0][1]); //ch[0]就相当于一维数组名str[2] return 0; }
文章图片
GIF动态图片
文章图片
2.
#include int main(void) {int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*ch)[4],sum=0; for(ch=a; ch
文章图片
GIF动态图片
文章图片
1?????指针数组???如果一个数组,它里面的变量全部是指针类型,且每个指针指向的数据类型相同,则称这种数组称为指针数组。定义指针数组的一般格式为:
数据类型 *数组名[n];
这实质上就是一个一维数组,只是它的元素存放的是指针值,数据类型不是其元素的数据类型,而是元素指向的数据类型。
1.
#include int main(void) { int a[3]={1,2,3}; int b[3]={20,30,40}; int c[3]={50,60,70}; int *ar[3]={a,b,c}; printf("%d\n",ar[0][1]); //ar[0]就相当于一维数组名a printf("%d\n",ar[1][1]); printf("%d\n",ar[2][1]); return 0; }
文章图片
文章图片
2.
#include int main(void) { char a[2][10]={"hong","zhangdkfp"}; char *p[2]={"hong","zhangdkfp"}; printf("%d\n",p[0]); printf("%d\n",p[1]); printf("%s\n",p[0]); a[0][1]='A'; printf("%c\n",a[0][1]); return 0; }
文章图片
【C语言|指针进阶(一)(C语言)】
文章图片
文章图片
p中存储的是两个串的首地址
文章图片
系统已经把内存空间开辟了,每一个数据位置是一个变量区,可以改变。指针数组可用来处理长度不一样字符数组问题,例如,要存一个班的学生姓名,如果用一个二维数组来存放这些数据,每一行必须事先固定好长度,这样短的姓名可能用不满一行的空间,造成空间浪费
文章图片
每一个数据位置是一个常量区,不可以改变,p[0][1]='A'; 是不能改变的。
2?????二维数组名作为数据的指针数组???#include void main(void) { int a[2][2]={1,2,3,4,}; int b[2][2]={3,4,5,6}; int (*p[2])[5]; //int[5] *p[2]; (便于记忆)一维数组装的是地址指向5个整形组成的一行。 p[0]=a; p[1]=b; printf("%d \n", p[0][0][1]); printf("%d \n", p[1][0][1]); }
文章图片
文章图片
推荐阅读
- C语言|指针进阶超详解
- 1000道程序员常见问题解析|一文搞懂Linux 内存管理原理
- c语言|问题 D: 马走日
- C语言教程 - 制作单位转换器
- 软件测试|详解软件测试中白盒测试基本概念及四种白盒测试方法
- C++|C++中的类与对象
- c语言|数组与指针超强巩固练习题——搞清各种数组与指针的关系
- c语言|通讯录的思路讲解和代码实现
- C语言|【C语言】动态内存管理详解