zoukankan      html  css  js  c++  java
  • NULL代表什么

    NULL字符
    在ASCII码的第一个字符是NULL,它的数值是0,占用1字节;C语言把它作为字符串的最后一个字符,以表示字符串到此结束.""
    NULL指针
    在C语言的头文件stddef.h中,NULL的定义如下:
    #define NULL
    #define __cplusplus
    #define NULL 0
    #else
    #define NULL ((void *)0)
    #endif
    #endif
    #interface NULL 0
    可见,NULL指针是一个无类型指针,并且值为0。一个指针,拥有2个属性--地址值和指针类型。两者的作用是:1,地址值标识变量的首地址(32位系统下指针的地址值占4字节);2,指针类型告诉编译器,应该怎样进行接下来的数据访问(int型数组和float型数组是不同的;数组访问与结构体访问也是不同的;等等)。
    NULL的出现是一种约定俗成,事实上它不是C语言中的关键字;把一个指针赋值为NULL,通常的说法是“将指针悬空”。这样,指针就无法再进行任何数据访问了。编程工作中有一类比较容易犯的错误--指针地址未进行正确的更新赋值就加以使用,这往往会造成很严重的后果(对内存区进行错误的涂抹)。所以一个良好的习惯是,当一个指针的工作稍事休息,先把它赋值为NULL,待到再度使用时,重新对其赋值以及进行指针类型转化。
    前面说到“NULL指针无法再进行任何数据访问”,其实是视编译器功能而定的。0位置指向的是程序起始,对于不同的编译器,NULL指针的操作结果是不同的:有些是不准读写,有些是只读,甚至读写都允许。编译器是人定的。引用网友win_hate在话题“关于NULL的不严谨”中的话来说:“如果说有谁不严谨了,那必定是读取0位置的程序员,而不是C。C的设计哲学之一是:‘程序员知道自己在干什么--没有安全带’”。

    #include <stdio.h>
    int main(void)
    {
     char * ptr=NULL;
     char * ptr0="hello";
        char  ptr1=NULL; 
     printf("%p ",ptr);
     printf("%p ",ptr0);
     printf("%d ",ptr);
     return 0;
    }
    /*
    00000000
    00422FA4
    0
    Press any key to continue
    */

  • 相关阅读:
    【SSH进阶之路】Hibernate映射——一对多关联映射(七)
    深入研究Clang(四) Clang编译器的简单分析
    LLVM每日谈之二十 Everything && Clang driver
    LLVM每日谈之十九 LLVM的第一本系统的书<Getting Started with LLVM Core Libraries>
    session在登录中的使用
    (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交
    网页中自动获取访问用户所在城市的接口插件
    bootstrap新闻模块样式模板
    springmvc的渲染
    springmvc的几点见解
  • 原文地址:https://www.cnblogs.com/jzhao/p/3145738.html
Copyright © 2011-2022 走看看