• 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 * 是通用指针类型,可以实现不同类型指针之间的无损转换

  • 相关阅读:
    [51nod 1135] 原根
    [CF1303F] Number of Components
    [CF1303E] Erase Subsequences
    [CF1303D] Fill The Bag
    子域名收集的一些姿势
    使用phpstorm+wamp实现php代码实时调试审计
    XSS小游戏通关Writeup
    Exif xss
    xss的一个tip
    应急响应
  • 原文地址:https://www.cnblogs.com/OoycyoO/p/8635764.html
Copyright © 2020-2023  润新知