zoukankan      html  css  js  c++  java
  • const char** p = char** q

    1.我们知道const char* p =  char*  q是可以通过的,然后咱们使用const char**  p1=  char** q1,见下图,编译器是报错的(由于编译器不同可能也会报警告)

    总之,后者是不被接受的。那么为什么?

       为了解释这个问题,先说明一个东西。就是什么情况下指针赋值是被接受的?

      “Both operands are pointers to qualified or unqualified versions of compatible types,and the type pointed to by the left has all the qualifiers of the type pointed to by the right”

      意思就是说三个条件:首先,指针所指向的数据可以是const 或者没有const修饰;其次,指针直接指向的数据类型需要是可兼容的;最后,右边指针指向的数据类型的所有特性左边指针指向的数据类型都有!

      先解释一下为什么const char*  p=  char* q是可以接受的。

      p表示指向数据类型为const char 的指针,q表示指向数据类型为char的指针。首先,第一条符合;其次,char const char是可兼容的;最后,char的所有特征const char都有,而且const charchar还厉害一点,人家还有const的性质呢,是吧。故而const char*  p=  char* q是可以接受的。

      再回到一开始的问题,为什么const char**  p1=  char** q1是不被允许的?

    沿着上面分析的顺序,一步步来。p1表示指向const char*的指针,p2表示指向char *的指针。必须明确一点的是const char *表示什么意思---指向const char 的指针,也就是unqualifiedchar *自然也是unqualified。首先,指针指向的数据都是unqualified;其次,直接指向的数据类型分别是const char*char *,二者是不兼容的,为什么这么说呢,咱们这么看哈,无论是是char还是const char,他们都是char是吧,所以是兼容的,但是const char*char *是两个指针,而且指向的东西还不一样(指向的东西兼不兼容无所谓了),所以二者不兼容!

    所以得出结论:char**  p1=  char** q1是不被接受的!!!

    当然了,这之间有点绕,加上个人水平有限,要是还没有理解,也没关系,至少知道别这么用就好了

  • 相关阅读:
    Eclipse 快捷键大全
    js字符串变量赋值的时候,一行写不下,想在下一行继续写
    java.lang.ClassNotFoundException: com.opensymphony.xwork2.util.TextUtils
    JS调用iframe父窗口元素和子窗口元素的方法
    no JMagick in java.library.path
    数据库建立索引的原则
    Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
    软件项目管理心得
    Errors running builder JavaScript Validator的问题
    21. Session Management
  • 原文地址:https://www.cnblogs.com/xubenben/p/2980002.html
Copyright © 2011-2022 走看看