目录
1)char * const p; //常量指针,p的值不可以修改(地址不可以修改),但是指向的内容可以修改
2)char const * p;//指向常量的指针,指向的常量值不可以改
1.什么是预编译,何时需要预编译:
预编译:为了增加编译速度往往要提前对一些头文件及代码进行编,然后给后正式编译时使用,以节省开销。
比如头文件:#include<stdio.h>
宏定义:#define MAX 10
1)总是使用不经常改动的大型代码体。
2)程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
2.下述三个有什么区别?
char * const p;//p为指向字符变量的指针,地址不变,地址内容可变
char const * p;//p为指向字符变量的指针,地址可变,地址内容不变
const char *p;//同上,二者没有区别
1)char * const p; //常量指针,p的值不可以修改(地址不可以修改),但是指向的内容可以修改
2)char const * p;//指向常量的指针,指向的常量值不可以改
3)const char *p;
const和char的顺序可以随意换,二者是一个意思。
3.右左法则:认识不同的指针
int(*p)[4];//整形数组指针--指向数组的指针
int* q[4];//整形指针数组--存指针的数组
int(*p1[5]);//指针数组 同上
int* (*p2[3])(int);//指针函数指针数组
int* p3(int n);//指针函数 返回值为指针的函数
int (*p4)(int, int);//函数指针--指向函数的指针
1)数组指针--指向数组的指针
2)指针数组--存指针的数组
3)指针函数--返回值为指针的函数
4)函数指针--指向函数的指针
5)右左法则:以int* (※p2[3])(int);为例,先找到标识符p2,
第一步,先看p2右边[3]代表数组,先把数组写上,数组
第二步,向左看,*代表指针,所以在数组前面写上指针 指针数组
第三步,向右看是一个(int)代表函数,所以把函数写在指针前面,函数指针数组
第四步,向左看,又是一个※,代表指针,所以把指针写在函数前面。指针函数指针数组
右左法则总结:先右后左,一次只看一个 (int)和(int n)都代表函数,若标识符有括号,则先看括号内