您的位置:首页 > 编程语言 > C语言/C++

C语言中关于数组指针与指针数组,二维指针二维数组、函数指针的总结

2019-07-08 10:51 471 查看

C语言中关于数组指针与指针数组,二维指针二维数组、函数指针的总结

知识点

数组指针与指针数组,
二维指针与二维数组、
函数指针

敲黑板先看这里

你觉不觉得C语言基础知识概念在头脑里没有形成知识体系?是否比较模糊比较乱?这就对了?我之前也是,有些知识点时间长了容易忘或者混淆,有些初学者抓不住重点觉得C语言复杂,难!实不相瞒,我也是这样的感受,于是我想是时候整体的把C语言给好好的总结一下了,这样形成一个知识体系,就不容易忘,也不容易混淆,这就是这次总结的意义所在。
分为几个板块总结:数据类型、指针与数组、字符串、多维指针与多维数组、函数、内存分配与操作问题、符号总结、控制语句、以及编译方面的问题。
总结宗旨:绝不专牛角尖!主要围绕常用应用知识为主,突出重点,能够很好的形成知识架构。比如:总结了float一般就不会再总结double,这样做没有多大意义,相反的,把重要的拿出来好好分析一下,是很有意义的,而相似的东西就可以举一反三了。实际上就这些知识点,概念搞明白后,C语言就通透多了

注意:如果指针没有搞清楚,请先看我的关于指针与数组的总结那篇。

数组指针与指针数组

1.数组指针是指针、数组类型的指针、指向一个数组的指针!可以通过数组类型定义数组指针:
AraayType* pointer; 也可以直接定义:type(*pointer)
;(其中:pointer为数组指针变量名,type为指向的数组的元素类型,n为指向的数组的大小)。

2.数组有自己的特定类型,数组的类型由元素类型和数组大小共同决定;例:
int array[5]的类型为int[5];
可以通过typedef为数组类型重命名:typedef type(name)[size]
数组类型: typedef int(AINT5)[5]; typedef float(AFLOAT10)[10];
数组定义: AINT5 iArray; AFLOAT10 fArray;

3.指针数组是数组、一个普通数组、数组中保存的每个元素是指针。type* pArray
;

二维指针与二维数组

1.指针的本质是变量,既然是变量那么肯定会占用一定的内存空间,指针变量是保存地址值的,那么指针的指针就是保存指针变量的地址值的。
为什么需要指向指针的指针?,因为指针在本质上也是变量,既然是变量,
那就存在传值调用和传地址调用,这就是指针的指针存在的意义。比如重置动态空间的大小,需要传指针的地址来改变。

2.二维数组在内存中以一维的方式排布,其中第一维是一维数组,第二维才是具体的值,数组名 可以看作常量指针;一维数组名代表数组首元素的地址,如:
int a[5]; a的类型为int*; 那么二维数组名同样代表数组首元素的地址,如: int m[2][5]; m的类型为int(*)[5];

3.二维数组可以看作是一维数组,数组名可以看作是指向数组的常量指针;数组中的每个元素都 是同类型的一维数组。C语言中只支持一维数组,数组的大小必须在编译期就作为常数确定,数组的元素可以是任何类型的数据,二维数组中的数组元素就是另一个数组。

函数指针

1.函数指针是指针、指向函数的指针,函数名是执行函数体的入口地址,可以通过函数类型定义函数指针:
FuncType* pointer;也可以直接定义:type(*pointer)(参数列表);
其中:pointer为函数指针变量名,type为所指函数返回值类型。

2.函数有自己特定的类型,函数的类型由返回值、参数类型和参数个数共同决定。如:
int add(int i, int i)类型为int(int,int); 可以通过typedef为函数类型重命名:
typedef type name(参数列表); 例: typedef int f(int, int); typedef void p(int);

3.回调函数是利用函数指针实现的一种调用机制,函数指针是实现回调机制的关键技术;
回调机制原理:
调用者不知道具体事件发生时需要调用的具体函数;
被调函数不知道何时被调用,只只读需要完成的任务;
当具体事件发生时,调用者通过函数指针调用具体函数;
回调机制中的调用者和被调函数互不依赖!

总结

以上总结以C语言知识框架为主线,着重强调实际经常应用!反复浏览体会可牢记,形成自己的知识框架,然后灵活应用,知识点来源于狄泰软件学习总结所得。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐