我知道EOF并且'\0'是整数类型,但如果是这样,它们不应该有固定值吗?
我打印了两个并获得-1 EOF和0 '\0'.但这些价值是固定的吗?
我也有这个
int a=-1;
printf("%d",a==EOF); //printed 1
Run Code Online (Sandbox Code Playgroud)
是EOF和'\0'整数的值?
CB *_*ley 51
EOF是一个宏,它扩展为具有类型int和依赖于实现的负值的整数常量表达式,但通常为-1.
'\0'是charC++中int的值为0,C中的值为0
为什么原因printf("%d",a==EOF);导致了1是因为你没有指定值EOF来a.相反,你检查是否a等于EOF,因为那是真的(a == -1 == EOF)它打印1.
Mat*_*lia 27
NULL并且'\0'保证评估为0,所以(使用适当的演员表)他们可以被认为是相同的价值; 但请注意,它们代表两种截然不同的东西:NULL是一个null(总是无效的)指针,'\0'而是字符串终止符.EOF而是一个负整数常量,表示流的结束; 通常它是-1,但标准没有说明它的实际价值.
C&C++的类型NULL和'\0':
'\0'是一个char,而在C中它是一个int; 这是因为在C中,所有字符文字都被认为是ints.在C++ NULL中,"只是"一个整数0,而在C中,它可以被定义为0到一个0 void *; 这不能在C++中完成(并且在注释中明确禁止)因为,在指针转换中C++更严格,a void *不能隐式转换为任何其他指针类型,因此,如果NULL是a void *,则需要将其转换为赋值时的目标指针类型:
int * ptr = (void *) 0; /* valid C, invalid C++ */
Run Code Online (Sandbox Code Playgroud)相关标准报价:
NULLNULL 是一个保证计算为0的整数类型:
4.10指针转换
空指针常量是整数类型的整数常量表达式(5.19)rvalue,其值为零.空指针常量可以转换为指针类型; 结果是该类型的空指针值,并且可以与指向对象的指针或指向函数类型的指针的每个其他值区分开来.相同类型的两个空指针值应相等.将空指针常量转换为指向cv限定类型的指针是单个转换,而不是指针转换的序列,后跟限定转换(4.4).
18.1类型
[...]宏NULL是本国际标准(4.10)中实现定义的C++空指针常量.(可能的定义包括
0和0L,但没有(void*)0).
'\0'必须存在0值char:
2.2字符集
基本执行字符集和基本执行宽字符集应各自包含一个空字符(分别为空宽字符),其表示具有全零位.
'\0'是char文字:
2.13.2字符文字
字符文字是用单引号括起来的一个或多个字符,如在
'x'字母L 中,可选地在字母L之前,如在'x'中.不以L开头的字符文字是普通字符文字,也称为窄字符文字.包含单个c-char的普通字符文字具有类型char,其值等于执行字符集中c-char的编码的数值.
它的值为0,因为该转义序列指定了它的值:
转义
\ooo由反斜杠后跟一个,两个或三个八进制数字组成,这些数字用于指定所需字符的值.
'\0' 用于终止字符串文字:
2.13.4字符串文字
在任何必要的连接之后,在转换阶段7(2.1)中,
'\0'将附加到每个字符串文字,以便扫描字符串的程序可以找到它的结尾.
EOF该定义EOF被委托给C89标准(如§27.8.2"C库文件"中所述),其中它被定义为特定于实现的负整数.
NULL空指针是0整数,可选择转换为void *; NULL是一个空指针.
6.3.2.3指针
[...]一个值为0的整型常量表达式,或者这种表达式转换为类型
void *,称为空指针常量.(宏NULL在<stddef.h>(和其他标头)中定义为空指针常量;请参阅7.17.)如果将空指针常量转换为指针类型,则保证将结果指针(称为空指针)与指针进行比较任何对象或功能.7.17通用定义
<stddef.h>[...]宏是
NULL它扩展为实现定义的空指针常量; [...]
'\0''\0' 是一个值为0的整数,用于终止字符串:
5.2.1字符集
[...]所有位都设置为0的字节,称为空字符,应存在于基本执行字符集中; 它用于终止字符串.
6.4.4.4字符常量
整数字符常量是用单引号括起来的一个或多个多字节字符的序列,如
'x'.[...]八进制转义序列中反斜杠后面的八进制数字被视为构造整数字符常量的单个字符或宽字符常量的单个宽字符的一部分.如此形成的八进制整数的数值指定所需字符或宽字符的值.[...]
整数字符常量具有类型
int.
EOFEOF 是一个实现定义的负整数
7.19输入/输出
<stdio.h>7.19.1简介
EOF它扩展为一个整数常量表达式,带有类型
int和负值,由几个函数返回以指示文件结束,即不再有来自流的输入
'\ 0'始终是空字符,或0. EOF取决于编译器,但通常为-1,并且始终是一个unsigned char无法容纳的值.不要依赖EOF的价值,因为它可以改变.总是做x == EOF而不是x == -1.'\ 0'的值始终为0.您可以依赖它.
| 归档时间: |
|
| 查看次数: |
73390 次 |
| 最近记录: |