zoukankan      html  css  js  c++  java
  • uCOS2014.1.11(转载)(void*)0 的理解

    一般把(void*)0定义为NULL
    表示这是个空指针
    void的含义
    void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。
    众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型

    转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。

    例如:
    float *p1;
    int *p2;
    p1 = p2;

    其中p1 = p2语句会编译出错,提示“'=' : cannot convert from 'int *' to 'float *'”,必须改为:
    p1 = (float *)p2;
    而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换:
    void *p1;
    int *p2;
    p1 = p2;

    但这并不意味着,void *也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包

    容“无类型”。道理很简单,我们可以说“男人和女人都是人”,但不能说“人是男人”或者“人是女人”。下面的语句编译出错:
    void *p1;
    int *p2;
    p2 = p1;

    提示“'=' : cannot convert from 'void *' to 'int *'”。
    在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多程序员却误以为其为void类型。例如:
    add ( int a, int b )
    {
    return a + b;
    }
    int main(int argc, char* argv[])
    {
    printf ( "2 + 3 = %d", add ( 2, 3) );
    }

    程序运行的结果为输出:
    2 + 3 = 5
    这说明不加返回值说明的函数的确为int函数。

  • 相关阅读:
    MySQL中文显示乱码
    mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择
    mysql 分表的3种方法
    mysql 清空或删除表数据后,控制表自增列值的方法
    MySQL 下优化SQL语句的一些经验
    mysql 常用命令
    MySQL获得指定数据表中auto_increment自增id值的方法及实例
    SQL Server Alwayson创建代理作业注意事项
    LinkedList子类与Queue接口
    List接口
  • 原文地址:https://www.cnblogs.com/chasing/p/3514770.html
Copyright © 2011-2022 走看看