1.int i;
int *pi;
int **ppi;
这些声明在内存中创建了变量,如果他们是自动变量,我们无法猜测他们的初始值。
2.如果是静态变量的话,会初始化为0;
3 指针在尚未初始化值之前,不应该执行间接访问操作。
ppi=&pi。这样就可以对ppi进行间接访问了
4.初始化表达式中的&操作符是可选的,因为函数名被使用时总是由编译器把它转换为函数指针。
5.回调函数的参数时把参数的类型声明为void*,表示一个指向未知类型的指针。
6.在使用比较函数中的指针之前,它们必须被强制转换为正确的类型。因为强制类型转换能够躲过一般的类型检查,所以必须确保函数的参数类型是正确的。
7.转移表
首先声明并初始化一个函数指针数组。
double *oper_func[oper](op1.op2);
oper从数组中选择正确的函数指针,而函数调用操作符将执行这个函数。
8命令行参数
argc用于确定传递了多少个参数。
argv指向数组的第一个元素,这就是它为什么被声明为一个指向字符的指针的指针的原因。
9 字符串常量
当一个字符串常量出现于表达式中,它的值是个指针常量。编译器把这些指定字符的一份拷贝存储在内存的某个位置,并存储一个指向第一个字符的指针。
但是当数组名用于表达式中时,他们的值也是指针常量。
10.。*"xyz" 表示为x
把二进制转化为字符串
putchar(”0123456789ABCDEF“ 【varlue%16】);
11.出现在表达式中的字符串常量的值是一个常量指针,它指向字符串的第一个字符,和数组名一样,你既可以用指针表达式也可以用下标来使用字符串常量。
·12
int abc()
返回值为int的函数
int abc[3] i
int型数组
int **abc()
返回值为指向int指针的指针的函数 返回值为”int型指针的指针“的函数
int(*abc)();
返回值为int的函数指针
int(*abc)【6】;
指向”int型数组“的指针
int *abc();
返回值”int型指针“的函数
int **(*abc【6】)(); 指向返回值为int型指针的指针的函数“的指针的数组。
int ** bcd(); 的函数 bcd=*abc【6】 指向“返回值为指向int指针的指针”数组的指针。
int**abc【6】;
int型指针的指针数组。
int *(*abc)【6】;
int向指针的指针数组 指向int型指针数组的指针。
首先 int * d【6】 指向指向int型的指针数组的指针。
int *(*abc())();
int *(*abc)())[6]
int *(*(*(*abc)())[6])(); 这里一定要从内到外进行分析。