首页
学习
活动
专区
工具
TVP
发布

C语言NULL究竟是不是0 等问题?

有人提问:C语言NULL究竟是不是0 等问题? NULL与数字0是不是等价的?...在C语言中,NULL一般有如下定义(在stddef.h中): #define NULL ((void*)0) 看起来似乎是一样的?没错从这里看,值确实一样的。...实际上,NULL可以是整数0C++中NULL0,相关阅读《为什么建议你用nullptr而不是NULL》),也可以是某个整数值转换为void*。 实际上NULL并不一定需要是0。...总结 关于NULL0,理解它们的类型不一样是很关键的,至于值本身是不是一样,并不重要。 更多内容可以参考C11标准文档的6.3.2.3 Pointers一节。...NULL的值可以为0,但不是必须为0 NULL用来其他指针对象函数区分开 NULL0含义不一样 ?

2.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

深入解析C语言数组指针(0)

目录 概述 一.指针 1.初级指针 2.高级指针 二.数组 1.一维数组 2.多维数组 三.指针和数组 1.概念区分 2.指针数组 概述   指针是C语言的重点,同时也是让初学者认为最难理解的部分。...有人说它是C语言的灵魂,只有深入理解指针才能说理解了C语言。暂且撇开这些观点不谈。这章是我在阅读《C指针》这本书的读书笔记。...值类型 假设我们对上面的第三个位置声明如下: float c=3.14;   我们可以看到这c中存储的值并不一样,我们声明的是一个浮点数,二内存中显示c是一个整数。...下面的两个声明都是使p2指向a2的第一个整型元素: int *p2=&a2[0][0]; int *p2=a2[0]; 作为函数参数的多维数组 作为函数参数的多为数组名的传递方式一维数组相同...对指针和数组的正确区分有助于理解c语言的结构语法。

1.2K30

再论c语言里面的void类型本质NULL

(2)c语言就是典型的强类型语言c语言中所有的变量都有明确的类型;因为c语言中的一个 变量都要对应内存中的一段内存,编译器需要这个变量的类型来确定这个变量占用内存的字节数这一段内存的解析方法。...(3)但是c语言中可以有没有类型的内存;在内存还没有具体的变量相绑定之前,内存就可以没有类型。...NULL 新媒体排版 1NULLC/C++中的标准定义: (1)NULL不是C语言关键字,本质上是一个宏定义。... *)0        // 这里对应C语言的情况    #endif 解释:C++的编译环境中,编译器预先定义了一个宏_cplusplus,程序中可以用条件编译来判断当前的编译环境是C++的还是C的...4注意不要混用NULL与'\0':  (1)'\0' '0' 0  NULL几个区分开。 (2)'\0'是一个转义字符,他对应的ASCII编码值是0,本质就是0

62830

C语言函数返回 1 返回 0 哪个好?

按照C语言语法, 0 表示假,非零(常常用 1)表示真,那是否函数也用 0 返回值表示“失败”,1 返回值表示“成功”呢?...C语言也有“行业潜规则”,不过,对于一般的函数,大多数C语言程序员常常使用返回值 0 表示成功,非零值表示失败。...仔细考虑下,其实C语言函数使用返回值 0 表示成功是有原因的。更一般的C语言函数返回值并不一定只有两种可能值(成功/失败),它可能还会返回对应错误原因的返回值。...-1 -2 都是“非零值”,而成功作为失败的对立面,也即“非零值”的对立面,myopen() 函数使用返回值 0 表示成功无可厚非。...当然了,若是希望我们的C语言代码应用性更广,则可以使用标准头文件里预先定义好的 EXIT_SUCCESS EXIT_FAILURE 宏。

2.4K20

NULL00,“0”,0你真的分得清吗?

前言 在C语言中,我们有时候看到NULL,有时候也看到'\0',那它们之间有什么区别呢? 本质 本质来说,NULL0,'\0'都是一样的,都是值0。是的,你没有听错。说到这本文差不多应该结束了。...//来源:公众号【编程珠玑】 博客:https://www.yanbinghu.com //null.c #include int main(void) { int a = NULL...; printf("%p\n",a); return 0; } 我们编译它: $ gcc -o null null.c null.c: In function ‘main’: null.c...当然,在C++中,你更应该使用nullptr,而不是NULL。 '\0' 我们都知道\是转义符,用单引号包起来,再加转义,实际上就是0,只不过它表示的是字符。...是的,它们都以遇到'\0'结束。 注意,它'0'完全不一样。通过打印就可以看到了,实际上'\0'的值就是0。 需要特别注意的是,如果'\0'的0后面跟八进制的数,则会被转义。

1.6K20

C语言程序结构0

C语言程序有三种基本结构:顺序结构、选择结构(分支结构)、循环结构; 也有把模块化程序结构算进去,作为C语言的四种程序结构。...对于循环结构来说,关键在于根据判断的结果,来决定循环体执行多少次; 模块化程序结构:C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的...顺序结构、分支结构循环结构并不彼此孤立的,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构,其实不管哪种结构,我们均可广义的把它们看成一个语句。...---- 学习有困难怎么办,快来加入微信群大家交流吧。...为避免闲杂人等加群,维持微信群良好的学习讨论环境,加群需要验证,请搜索群主微信号:qq1146595625,备注填写一个你认为的C语言难点即可。

1.5K10

【代码规范】详解nullptr、NULL0

欢迎大大们纠错~ null NULL CC++语言对大小写是敏感的,也就是说nullNULL本质上是区别对待的。...1) 如果gcc是c 语言模式而且gcc版本低于3.0,那么定义NULL 为 void* 类型 2) 如果gcc是c++ 语言模式,而且是32位,那么定义NULL 为无类型的0 3) 如果gcc是c++...为了解决这种二义性,nullptr应运而生,C++是强类型语言,又有模板、重载之类需要编译器“依类型随机应变”的东西,所以作为指针 型的0整数类型的0就必须分开,不然会带来很多麻烦。...NULL 0 其实NULL0的关系在上面已经讲的差不多了,因为C++中不能将void *类型的指针隐式转换成其他指针类型,而又为了解决空指针的问题,所以C++中引入0来表示空指针,在一些编译器上又会用...所以在C++中NULL不可以用于字符串的末尾,支持0'\0'作为字符串结尾。

1.4K20

C语言C语言数组指针

---- 友情提醒:本文可能是全csdn最详细的指针内容了,希望你能用心读下去 前言 接下来的讲解部分是指针的进阶,包含多种指针以及对应的数组,这部分章节对我们来说很重要,也是c语言中的重点模块儿,重要性不言而喻...(c/c++会把常量字符串储存到单独的一个内存区域中) 当这两个指针指向同一个常量字符串时,实际上就是指向同一块儿地址**(指针就是地址,地址就是指针)** 2.数组指针 2.1数组指针的定义 1.数组指针嘛...(有数组名,元素个数,元素类型),那我们写一个指针,让他指向数组就可以了 例如: int arr[10]={0}; int (*ps)[10]=&arr; //注意ps[]的结合优先级较高,如果没有括号...我们直接大白话给他翻译成通俗易懂的语言。怎么样就是回调函数呢?就比如你现在有一个可以实现两数之和功能的函数Add,你明明可以在main函数里面直接调用这个函数,给他传上两个整数的参数,让他返回的值。...4.my_qsort函数的第二第三个参数分别是,数组的元素个数(记住是元素个数,比如一个结构成员,一个浮点数,一个整型,都是一个元素)单个元素的字节大小(记住是字节大小,也就是1,2,3,4这些大小

63.3K21

c语言0->1入门——HelloWorld

关于作者: 2019NOIP退役成员,学习c语言已有多年经验,更懂得考试的题目,初学者学习时所遇到的问题 华为云享专家,以及CSDN的新星创作者,有写博客的一定能力 关于本栏目 本栏目的宗旨是带你入门...c语言,作者打算用题海+c语言的概念来完成本栏目, 适用人群:面向广大的编程爱好者大学生来进行创作 学完本栏后你能达到的水平:计算机二级水平左右,入门c语言学习 题目:主要来源于网络c语言的入门算法题目...; return 0; } 这个程序看似只有6行,但是蕴含的东西不少,这个我们会在后面的栏目单独讲,作为初学者的彦祖们,此刻按照栏目中的程序照着抄一遍就好,每篇博客我们都会学习一点的新语法!...; return 0; } 这样就可以在一个项目中运行俩个c程序了!...可以说c++是由c语言发展而来的,甚至与c语言兼容。理论上说c++能做到的事情c语言都能做到,但c++语言为大家提供了更简单的方法去实现。

62220

C语言中的函数指针(*(void(*)())0)();

‘’ 我刚开始学习C语言的时候是写简单的数学运算在黑框框里面跑,然后用C语言写51单片机的代码,再到后来玩stm32,学应用层编程,学内核编程等,框架结构逐渐变的复杂,也越来越觉得对C语言的理解还不够到位...个人总结一下C语言中有关函数的知识,如有问题请留言指明*v* (*(void(*)())0)(); 其实这个语句只有在微处理器最底层才有可能被调用,因为应用层几乎没有直接对一个地址进行操作的。...函数指针变量整形变量相对比的话,void (*)(int) 就相当于int,而变量名funcp就和a等同了。...看到这里,再回头看看上面的(*(void(*)())0)();语句,你会发现(void(*)())0是将0强转成无返回值无入参的函数指针地址,外面一层就是取地址执行函数。...C语言的函数指针非常重要,大工程里面经常出现各种回调函数,学习的过程中,基本功还是要扎实,不然真的会经常踏入陷阱。 ps:本文参考资料《C陷阱与缺陷》,感兴趣的同学可以读一读

1.7K20

MySQL字段nullnot null学习思考

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接本声明。...最后的理解是:mysql所有字段尽可能使用not null。最终时间默认值设为1970-01-01 08:00:00,使用这个的原因是该时间对应的时间戳是0。...在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS NULL关键字。...你应该用0、一个特殊值或者一个空串代替NULL。(影响索引效率的原因:NULL不是空值,而是要占用空间,所以MYSQL进行比较的时候,NULL会参与字段比较,所以对效率有一部分影响。...MYSQL NULL特殊的影响使用:https://opensource.actionsky.com/20190710-mysql/

2.7K20

ZYNQ笔记(0):C语言基础知识复习

ZYNQ的SDK是用C语言进行开发的,C语言可以说是当今理工类大学生的必备技能。我本科学C语言时就是对付考试而已,导致现在学ZYNQ是一脸懵逼。现在特开一帖,整理一下C语言的基础知识。...a[0]等价,C语言规定只能逐个引用数组元素,不能一次引用整个数组。...int *a,*b,c[10]; a = c; //将数组c的首地址赋值给指针a b = &c[0]; //将数组c的首元素c[0]的地址赋值给指针b //指针a、b都指向数组c //a = &...------------------------------------------ GPIO_TypeDef GPIOA; //常见于函数形参 八、其他知识补充 1.ifdef条件编译 不仅是C语言还是...零点起飞学C语言[M]. 清华大学出版社, 2013. [3]正点原子STM32教程

78720
领券