搬瓦工官网中国镜像站:https://bwh81.net(搬瓦工官方网站,放心访问)
搬瓦工官方中文网:https://bwh86.net
搬瓦工官网所有方案以及库存监控页面:https://bwh86.net/monitor
最新搬瓦工最大优惠力度优惠码(循环优惠6.58%):BWHNCXNVXV
搬瓦工新用户注册和图文购买教程:点击查看
在非常高的层次上,我们可以将NULL视为null指针,它在C中用于各种目的。NULL的一些最常见用例是:
1.在尚未为该指针变量分配任何有效内存地址时初始化该指针变量。
2.在访问任何指针变量之前检查空指针。这样,我们可以在与指针相关的代码中执行错误处理,例如,仅当其不为NULL时才取消引用指针变量。
3.当我们不想传递任何有效的内存地址时,将空指针传递给函数参数。
1的例子是
2的例子是
3的例子是
应当注意,NULL指针与未初始化和悬空的指针不同。在特定的程序上下文中,所有未初始化或悬空的指针或NULL指针都是无效的,但是NULL是C标准中提到的具有特定用途的特定无效指针。我们的意思是未初始化和悬空的指针是无效的,但它们可以指向某些内存地址。
通过专门提及NULL指针,C标准提供了C程序员可以使用的机制,并可以检查给定的指针是否合法。但是NULL到底是什么以及它是如何定义的?严格来说,NULL扩展为实现定义的空指针常量,该常量在许多头文件(例如“ stdio.h ”,“ stddef.h ”,“ stdlib.h ”等)中定义。
“值为0的整数常量表达式,或转换为void *类型的表达式称为空指针常量。如果将空指针常量转换为指针类型,则保证生成的指针(称为空指针)将不相等的值与指向任何对象或函数的指针进行比较。”
在继续进行这个NULL讨论之前,让我们先介绍几行有关C标准的代码。请注意,ISO / IEC 9899:2011是C语言的最新标准,于2011年12月发布。这也称为C11标准。为了完整起见,让我们提到C的先前标准是C99,C90(也称为ISO C)和C89(也称为ANSI C)。
进入我们的讨论,在大多数C编译器实现的头文件中,NULL宏定义为((void *)0)。但是C标准说0也是一个空指针常量。这意味着按照标准,以下内容也是完全合法的。 int * ptr = 0;
以上C语句中的0在指针上下文中使用,与整数0不同。这是为什么首选使用NULL的原因之一,因为它使代码在代码中明确表明程序员使用的是空指针,而不是整数0。关于NULL的另一个重要概念是“ NULL扩展为实现定义的空指针常量”。此声明也来自C11第7.19条。这意味着空指针的内部表示可以是非零的位模式,以传达NULL指针。这就是为什么NULL始终不需要在内部表示为全零位模式的原因。编译器实现可以选择将“空指针常量”表示为全1或其他形式的位模式。但是,再次,作为C程序员,除非我们参与编译器编码或甚至低于编码级别,否则我们不必担心null指针的内部值。话虽如此,通常将NULL表示为仅将所有位设置为0。要在特定平台上了解这一点,可以使用以下内容
最有可能的是,它打印出0,这是典型的内部null指针值,但是它又会根据C编译器/平台的不同而有所不同。您可以在上述程序中尝试其他一些操作,例如printf(“'%c”,NULL)或printf(“%s”,NULL)甚至是printf(“%f”,NULL)。这些输出将根据所使用的平台而有所不同,但是特别有趣的是将%f与NULL一起使用!
我们可以在C中的NULL上使用sizeof()运算符吗?也许允许使用sizeof(NULL),但是确切的大小取决于平台。
由于NULL被定义为((void *)0),我们可以将NULL视为特殊的指针,并且其大小将等于任何指针。如果平台的指针大小为4个字节,则上述程序的输出为4。但是,如果平台上的指针大小为8个字节,则上述程序的输出为8。
取消对NULL的引用呢?如果我们使用以下C代码,将会发生什么
在某些机器上,上述程序可以成功编译。同样,它取决于许多因素。但是提到上述片段的想法是,在访问它之前,我们应该始终检查NULL。
由于通常将NULL定义为((void *)0),所以让我们也讨论一下void类型。根据C11标准条款6.2.5,“ void类型包括一组空值;它是无法完成的不完整对象类型”。甚至C11条款6.5.3.4都提到“ sizeof运算符不应应用于具有函数类型或不完整类型的表达式,该类型的括号名称或指定位字段成员的表达式。”基本上,这意味着void是一个不完整的类型,其大小在C程序中没有任何意义,但是实现(例如gcc)可以选择sizeof(void)为1,以便可以将void指针指向的平面存储器视为未类型化的存储器,即字节序列。但是以下内容的输出不必在所有平台上都相同。
在gcc上,以上代码将输出1。sizeof(void *)呢?C11在这里提到了准则。从第6.2.5节开始,“指向void的指针应与指向字符类型的指针具有相同的表示和对齐要求”。这就是为什么以下命令的输出与计算机上任何指针大小相同的原因。
尽管上面提到了机器相关的内容,但作为C程序员,我们应该始终努力使我们的代码尽可能地可移植。因此,我们可以得出关于NULL的结论,如下所示:
1.始终将指针变量初始化为NULL。
2.在访问任何指针之前,请始终执行NULL检查。
文章中有一些观点性的问题借鉴了国外程序员的想法。
了解更多,以及领取免费学习资料及教程,请查看下方图片:
搬瓦工机房方案整理
搬瓦工目前提供了4个方案,包括搬瓦工KVM方案,搬瓦工CN2 GT方案,搬瓦工CN2 GIA-E方案和搬瓦工香港方案,每种方案有多种套餐配置,详细的配置和价格整理如下:套餐名称 | CPU | 内存大小 | 硬盘容量 | 每月流量 | 带宽 | 价格/年 | 购买链接 |
---|---|---|---|---|---|---|---|
搬瓦工CN2-E限量版(搬瓦工补货通知群(禁言,仅推送):903230558) | |||||||
CN2 GIA LIMITED EDITION | 1核 | 1 GB | 10 GB | 500 GB | 1 Gbps | $89.99 | 立即购买 |
搬瓦工CN2 GT方案 | |||||||
CN2 | 1核 | 1024 MB | 20 GB | 1000 GB | 1 Gbps | $49.99 | 立即购买 |
CN2 | 1核 | 2048 MB | 40 GB | 2000 GB | 1 Gbps | $99.99 | 立即购买 |
CN2 | 2核 | 4096 MB | 80 GB | 3000 GB | 1 Gbps | $199.99 | 立即购买 |
CN2 | 2核 | 8 GB | 160 GB | 5000 GB | 1 Gbps | $399.99 | 立即购买 |
CN2 | 3核 | 16 GB | 320 GB | 8000 GB | 1 Gbps | $799.99 | 立即购买 |
CN2大流量 | 3核 | 16 GB | 320 GB | 12000 GB | 1 Gbps | $899.99 | 立即购买 |
CN2大流量 | 3核 | 16 GB | 320 GB | 16000 GB | 1 Gbps | $1299.99 | 立即购买 |
搬瓦工CN2 GIA-E方案(可选搬瓦工DC9 CN2 GIA,搬瓦工DC6 CN2 GIA,搬瓦工日本大阪软银线路) | |||||||
CN2 GIA ECOMMERCE | 2核 | 1 GB | 20 GB | 1000 GB | 2.5 Gbps | $169.99 | 立即购买 |
CN2 GIA ECOMMERCE | 3核 | 2 GB | 40 GB | 2000 GB | 2.5 Gbps | $299.99 | 立即购买 |
CN2 GIA ECOMMERCE | 4核 | 4 GB | 80 GB | 3000 GB | 2.5 Gbps | $549.99 | 立即购买 |
CN2 GIA ECOMMERCE | 6核 | 8 GB | 160 GB | 5000 GB | 5 Gbps | $879.99 | 立即购买 |
CN2 GIA ECOMMERCE | 8核 | 16 GB | 320 GB | 8000 GB | 5 Gbps | $1599.99 | 立即购买 |
CN2 GIA ECOMMERCE | 10核 | 32 GB | 640 GB | 10000 GB | 10 Gbps | $2759.99 | 立即购买 |
CN2 GIA ECOMMERCE | 12核 | 64 GB | 1280 GB | 12000 GB | 10 Gbps | $5399.99 | 立即购买 |
搬瓦工香港方案 | |||||||
香港CN2 GIA | 2核 | 2048 MB | 40 GB | 500 GB | 1 Gbps | $899.99 | 立即购买 |
香港CN2 GIA | 4核 | 4096 MB | 80 GB | 1000 GB | 1 Gbps | $1559.99 | 立即购买 |
香港CN2 GIA | 6核 | 8192 MB | 160 GB | 2000 GB | 1 Gbps | $2999.99 | 立即购买 |
香港CN2 GIA | 6核 | 16384 MB | 320 GB | 4000 GB | 1 Gbps | $5899.99 | 立即购买 |
搬瓦工日本方案 | |||||||
日本CN2 GIA | 2核 | 2048 MB | 40 GB | 500 GB | 1.2 Gbps | $899.99 | 立即购买 |
日本CN2 GIA | 4核 | 4096 MB | 80 GB | 1000 GB | 1.2 Gbps | $1559.99 | 立即购买 |
日本CN2 GIA | 6核 | 8192 MB | 160 GB | 2000 GB | 1.2 Gbps | $2999.99 | 立即购买 |
日本CN2 GIA | 6核 | 16384 MB | 320 GB | 4000 GB | 1.2 Gbps | $5899.99 | 立即购买 |
搬瓦工KVM方案 | |||||||
KVM | 2核 | 1024 MB | 20 GB | 1 TB | 1 Gbps | $49.99 | 立即购买 |
KVM | 3核 | 2 GB | 40 GB | 2 TB | 1 Gbps | $99.99 | 立即购买 |
KVM | 4核 | 4 GB | 80 GB | 3 TB | 1 Gbps | $199.99 | 立即购买 |
KVM | 5核 | 8 GB | 160 GB | 4 TB | 1 Gbps | $399.99 | 立即购买 |
KVM | 6核 | 16 GB | 320 GB | 5 TB | 1 Gbps | $799.99 | 立即购买 |
KVM | 7核 | 24 GB | 480GB | 6 TB | 1 Gbps | $1,199.99 | 立即购买 |
还木有评论哦,快来抢沙发吧~