sizeof(char)等于1,那sizeof(‘a’)为什么等于2?
编译器不同,结果会有所不同。
如果是VC、VS编译器,结果为1,表示字符中的字节数。
如果结果是2,那么只有一个解释,‘a’是整型常量,是unsigned int,且楼主的编译器中int的宽度为16位2字节,所以是2。
扩展资料
一、定义不同
sizeof是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
2、它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:数组——编译时分配的数组空间大小;指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4)。
二、语法不同
1、strlen是函数,要在运行时才能计算。参数必须是字符型指针。当数组名作为参数传入时,实际上数组就退化成指针了。
2、它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。
编译器不同,结果会不一样。
如果是VC、VS编译器,结果为1,表示一个字符的字节数
如果结果是2,那只有一种解释,‘a’是整型常量,是unsigned int,且楼主的编译器中int的宽度为16位2字节,所以是2。
扩展资料:
在C语言中,整型常量有三种书写形式:
(1) 十进制整数。十进制整数就是通常整数的写法。例如:11、15、21等。
(2) 八进制整数。八进制整数的书写形式是在通常八进制整数的前面加一个数字0。例如:00、0111、015、021等,它们分别表示十进制整数:0、73、13、17
(3) 十六进制整数。十六进制整数的书写形式是在通常十六进制整数的前面加0x。例如:0x0、0x111、0x15、0x21等,它们分别表示十进制整数0、273、21、33。
注意,整型常量前面没有+或者-,-10其实是一元-运算符和操作数10,同样整型常量的十进制表示并没有0,单独写一个0其实是一个八进制常量。
如果是VC、VS编译器,结果为1,表示一个字符的字节数
如果楼主的结果是2
那只有一种解释
‘a’是整型常量,是unsigned int,且楼主的编译器中int的宽度为16位2字节,所以是2
Press any key to continue
环境VC6
#include<stdio.h>
void main()
{
printf("%d %d\n",sizeof(char),sizeof('a'));
}