怎么定义NULL
怎么定义NULL
作为一种风格, 很多人不愿意在程序中到处出现未加修饰的0。因此定义了预处理宏NULL (在 和其它几个头文件中) 为空指针常数, 通常是0 或者((void *)0) 。希望区别整数0 和空指针0 的人可以在需要空指针的地方使用NULL。
使用NULL 只是一种风格习惯; 预处理器把所有的NULL 都还原回0, 而编译还是依照上文的描述处理指针上下文的0。特别是, 在函数调用的参数里, NULL之前(正如在0 之前) 的`类型转换还是需要。
NULL 只能用作指针常数;
拓展1:将一个数的从第5位开始的7个数取出,其余位置0
解:#include
main()
{
int n;
printf(“input n:”);
scanf(“%d”,&n);
n=n&(∽(∽0<<7))<<5;
printf(“%dn”,n);
};
拓展1:NULL指针
NULL指针是一个无类型指针,并且值为0。一个指针,拥有2个属性--地址值和指针类型。两者的作用是:1,地址值标识变量的首地址(32位系统下指针的地址值占4字节);2,指针类型告诉编译器,应该怎样进行接下来的数据访问(int型数组和float型数组是不同的;数组访问与结构体访问也是不同的;等等)。
NULL的出现是一种约定俗成,事实上它不是C语言中的关键字;把一个指针赋值为NULL,通常的说法是“将指针悬空”。这样,指针就无法再进行任何数据访问了。
编程工作中有一类比较容易犯的错误--指针地址未进行正确的更新赋值就加以使用,这往往会造成很严重的后果(对内存区进行错误的涂抹)。所以一个良好的习惯是,当一个指针的工作稍事休息,先把它赋值为NULL,待到再度使用时,重新对其赋值以及进行指针类型转化。
前面说到“NULL指针无法再进行任何数据访问”,其实是视编译器功能而定的。0位置指向的是程序起始,对于不同的编译器,NULL指针的操作结果是不同的:有些是不准读写,有些是只读,甚至读写都允许。编译器是人定的。
引用网友win_hate在话题“关于NULL的不严谨”中的话来说:“如果说有谁不严谨了,那必定是读取0位置的程序员,而不是C。C的设计哲学之一是:‘程序员知道自己在干什么--没有安全带’”。
-
2016考研新闻传播学复习考点:外国新闻传播史
以下是本站为大家整理好的有关考研的资料,希望对大家有所帮助,如有疑问请关注本站!一、古代新闻传播发展的三个里程碑及其意义:(一)语言的产生是传播史上第一个重要的里程碑。1、应付大自然的威胁能力增强和共同劳动2、人类思维能力加强3、加快了人们信息交流的传...
-
2016考研时间无法充值:8个问题要及时解决
考研成绩要想好,行为习惯少不了。观察这几年的考研成绩,我们会发现,一个考研成绩好的学生,他/她为考研所采取的行为和习惯是最终让他/她取得好成绩的重要因素。印度谚语说:播种一种行为,收获一种习惯;播种一种习惯,收获一种性格;播种一种性格,收获一种命运。既然选...
-
报考指南:选择目标院校应以适合为主
以执着的坚守和艰辛的付出来应对考研路上的挫折,既然选择了放足远方,便无悔风雨兼程。而毅力的大部分来自于目标,目标的形成又多来自自身的性格。好的开始就是成功的一半,对已考研人也是一样的,明确考研的目标,你才算是真正的踏上了考研路。其中目标院校和专业尤其重...
-
安徽师范大学2016年考研世界史真题
2017考研已经悄然到来了,考生们也在积极寻找考研真题了。下面是小编为大家整理收集的关于安徽师范大学2016年考研世界史真题的相关内容,欢迎大家的阅读。名词解释:乌鲁卡基那改革,梭伦改革,希罗多德,尼西亚会议,末日审判书,拿破仑法典,加富尔,全国工业复兴法史料分析题:(...