C二级指针

问题描述:char *lineptr[MAXLINE];

                     char *p;

                      p = lineptr;         编译器提出警告,类型矛盾

 

解决方法:将p定义为二级指针,即  char **p;既可

 

原因分析:因为lineptr是一个字符指针数组,该数组里的每个元素存放的不是数据,而是指针(其实指针也是数据,一种特殊的数据),而数组名其实也是指针,这个指针比较特殊,是一个常量(一经定义不可改变,普通指针是变量,可以改变),并且指向数组的第一个元素,所以对于字符指针数组来说,数组名其实是一个指向指针的指针,也就是二级指针,那么对于char *p;这条语句定义的是一个一级指针,即它指向的不是指针,而是某种具有特定数据类型的对象,所以不能直接用一级指针来接收二级指针,,因为如果直接赋值的话,就相当于将一个指针赋值给某种特定数据类型的对象,这样不合法。lineptr相当于一个二维数组。

 

另:一个比较复杂的强制类型转换   int numcmp(char *, char *);

                                                       int strcmp(char *, char *);

                                                      (int (*)(void *, void *)(numeric ? numcmp : strcmp);

                                                      将numcmp或者strcmp函数的类型强制转换为(int (*)(void *, void *))类型, void * 是通用指针类型,可以实现不同类型指针之间的无损转换

posted @ 2018-03-23 23:44  Latuper  阅读(227)  评论(0编辑  收藏  举报