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

  • 相关阅读:
    初识Vulkan
    网络相关系列之中的一个:Android中使用HttpClient发送HTTP请求
    Hello,Android
    熊猫猪新系统測试之四:Ubuntu 14.04
    iOS OC08,09_内存管理
    XML总结
    【Scala-ML】怎样利用Scala构建并行机器学习系统
    在vs2010中编译log4cxx-0.10.0具体方法(从下载、编译、解决错误具体介绍)
    UI_UITableView_搭建
    Angular 4 子路由
  • 原文地址:https://www.cnblogs.com/OoycyoO/p/8635764.html
Copyright © 2011-2022 走看看