C++ 什么';这就是';0''\0';0与sizeof()和strlen()?
当我改变C++ 什么';这就是';0''\0';0与sizeof()和strlen()?,c++,sizeof,strlen,C++,Sizeof,Strlen,当我改变intpt[4]={'0','\0',0}到intpt[4]={'\0','0',0} 结果是 size of pt: 16 strlen of pt: 1 为什么?'0'是一个值为48的字符,表示可打印和可显示的数字 '\0'和0都是值0,第一个值为字符类型,第二个值为整数文本 sizeof给出对象或数组中的字节数strlen统计从char数组开始到值为0的第一个字节的字节数,不包括终止的0。在您的示例中,您有一个4个int的数组,每个int取4个字节;4*4=16。'0'是一个值为
intpt[4]={'0','\0',0}代码>到intpt[4]={'\0','0',0}代码>
结果是
size of pt: 16
strlen of pt: 1
为什么?'0'
是一个值为48的字符,表示可打印和可显示的数字
'\0'
和0
都是值0,第一个值为字符类型,第二个值为整数文本
sizeof
给出对象或数组中的字节数strlen
统计从char
数组开始到值为0的第一个字节的字节数,不包括终止的0。在您的示例中,您有一个4个int的数组,每个int取4个字节;4*4=16。'0'
是一个值为48的字符,表示可打印和可显示的数字
'\0'
和0
都是值0,第一个值为字符类型,第二个值为整数文本
sizeof
给出对象或数组中的字节数strlen
统计从char
数组开始到值为0的第一个字节的字节数,不包括终止的0。在您的示例中,您有一个4个int的数组,每个int取4个字节;4*4=16。
'0'
是“ASCII字符0
”,其值为0x30
'\0'
是表示值0
的字符,其值为0
0
只是值0
pt
是一个由4
个整数组成的数组,因此它的大小是我们机器上一个整数大小的4倍(显然是4),因此得到16
- 由于
pt
是一个整数数组,其第一个值为0
,即0x30
,因此作为整数的该值为0x00000030
。当您向字符指针键入castpt
时,它看起来就像指向前3个值为零的字符串的指针。因此,strlen
是0
(编辑:因为您的特定体系结构)
'0'
是“ASCII字符0
”,其值为0x30
'\0'
是表示值0
的字符,其值为0
0
只是值0
pt
是一个由4
个整数组成的数组,因此它的大小是我们机器上一个整数大小的4倍(显然是4),因此得到16
- 由于
pt
是一个整数数组,其第一个值为0
,即0x30
,因此作为整数的该值为0x00000030
。当您向字符指针键入castpt
时,它看起来就像指向前3个值为零的字符串的指针。因此,strlen
是0
(编辑:因为您的特定体系结构)
字符串以“\0”(null)字符结尾。所以第一个确实有一个值,然后字符串结束,而第二个没有值。但这只是一种假设。字符串以“\0”(null)字符结尾。所以第一个确实有一个值,然后字符串结束,而第二个没有值。这只是一个假设。为什么在第一个例子中,pt的斯特伦:1@denzel_wu如果您的体系结构是little endian,则
pt[0]
的最低有效字节(0x30
)存储在数组pt
的第一个字节中。因此,strlen(pt)==1
。为什么在第一个示例中,pt的strlen:1@denzel_wu如果您的体系结构是little endian,则pt[0]
的最低有效字节(0x30
)存储在数组pt
的第一个字节中。因此,strlen(pt)==1
。
size of pt: 16
strlen of pt: 1
size of pt: 16
strlen of pt: 0