1.指针数组与数组指针
指针数组的实质是一个数组,这个数组里面的元素全部都是指针变量。
数组指针的实质是一个指针,这个指针指向的是一个数组,因而叫做数组指针。
如何判断一个符号的实际含义:(第一步)找核心:其他的符号均为核心服务
(第二步)找结合:根据符号优先级,距离与核心结合
(第三步)再结合:继续向外结合直到整个符号结束
2.函数指针
函数指针的实质是指针。(函数指针、数组指针、普通指针的区别在于指针指向什么何物)
函数名的实质就是函数这段代码的首地址。
类型与变量的区别:类型本身并不占内存,它只是一个模具,而变量是这个类型的一个具体实例。
补充说明:
在LINUX下,scanf是和系统的标准输入打交道,printf和标准输出打交道。在输入时以\n结束,但是scanf并不会接收\n,所以下次scanf就会拿出来\n导致无法拿出真实的值,采用方法,while(c=="\n");
3.typedef与#define宏的区别
typedef是C语言的关键字,用于定义新的类型。
#define是单纯的替换,替换发生在预编译过程。
#define dpChar char*
typedef char* tpChar;
dpChar p1,p2; //p1=是char*类型 p2是char
tpChar p3,p4; //p3,p4均是char*类型
顺序上,typedef与#define是相反的,且typedef语句需要加;号,同时typedef可以一次性定义很多个指针变量。
typedef的作用:1)简化类型,让程序更易理解和书写。
2)创造平台无关类型,便于移植。
4.二重指针
二重指针本质上也是指针变量,它指向的变量类型必须是一重指针
5.二维数组
一维数组在内存中连续分布,由多个内存单元组成,而二维数组在内存中也是连续分布,由多个内存单元组成。
二维数组更好理解、利于组织,可以简化编程。
二维数组访问小结:
1.a[i][j]等同于*(*(p+i)+j)
2.p不解引用,对p加减是在第一维里偏移地址
3.p解一次引用,对*p加减是在第二维里偏移地址
4.p解二次引用,才能访问到值,如*(*p)