sizeof的返回值为何是这样啊?看不懂啊,求详细解释啊

TCHAR p[] = _T("AB你我");
int a = sizeof (p);
int b = _tcslen(p);

第一次设置是宽字符 a是7,b是6
第二次设置是UNICODE a是10 b是4
这是为什么?我不明白他是怎么算的

求详细一点的解释啊,一步一步啊,我菜鸟,谢谢啦!!!

sizeof计算的是数组占用的字节数(BYTE即char)。
ANSI下,英文1char,中文2char,加上一个结束符1个char,一共7个char
UNICODE下,中英文都是2char,结束符也是WCHAR即2个char,一共10个char

strlen/tcslen 计算的是字符串长度
ANSI下,不计算结束符,就是7-1=6个char
UNICODE下,不计算结束符,中英文都是1个WCHAR,一共4个WCHAR
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-29
sizeof()计算的是数据存储所用的内存空间!
ASCII字符时,AB占2字节,你我 占4字节,而\0占1字节,所以是7字节!
UNICODE字符时,AB占4字节,你我 占4字节,\0占2字节,所以是10字节!

而_tcslen()的原型是strlen();计算的是字符的个数!(不包含\0)
当定义为ASCII时,一个汉字算两个字符,所以是6个字符!
而UNICODE时,本身一个字符用就用2字节存储,所以这里的汉字就算一个字符!所以是4个字符!

关于sizeof问题,这个程序输出结果怎么解释??求高手指教啊!谢谢了!!
1. sizeof(a)输出结果为12,因为字符串以'\\0'结束,'\\0'占一个字节。2. sizeof(p)32位系统输出为4字节(4字节=4*8位=32位),64位系统输出为8字节(8字节=8*8位=64位),。指针只是一个存放变量地址的一个变量 3. strlen(p)输出结果为11。strlen不区分是数组还是指针,就读到\\0为止返回...

C语言中,sizeof返回值代表什么意思?
sizeof是C\/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义 这是一个依赖于编译系统的值,一般定义为typedef unsigned int size_t;编译器林林总总,但作为一个规范,都会保证char、signed char和unsigned char的sizeof值...

sizeof的值为什么是1啊?
size 相当于TYPE与LENGTH的乘积,X1的类型为BYTE返回值1,LENGTH对DUP时返回返回值也是1,所以SIZE值为1。size是:取变量数据项长度算符。SIZE算符,汇编程序将回送分配给该变量的字节数,即 SIZE=LENGTH TYPE 例如:ARRAY DW 50 DUP(0) 则 SIZE ARRAY=50 2=100 要注意:对字符串变量求其长度,...

p=(LinkList)malloc(sizeof(LNode))能不能仔细的给我解释一下是什么意...
这个通常是开辟一个新的地址空间时用的,LinkList是指针的类型,就和int *p一样,此时p指向存放LinkList类型变量的地址空间,malloc是函数,参数为要开辟空间的大小,sizeof是求Lnode的大小,总的就是说开辟一个Lnode大小的新的空间,p指向该空间 ...

为什么返回值是1?
sizeof函数只是返回该类型的所占内存的字节数,加上*号,是个指针变量,指针所占内存为1个字节,所以返回1。去掉*号是字符型,占四个字节,所以返回4。

sizeof的返回值是什么类型?
6.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。7.当适用了于一个结构类型时或变量, sizeof 返回实际的大小,当适用一静态地空间数组, sizeof 归还全部数组的尺寸。sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸 char str[20]...

sizeof(1+1.0)返回值不是4,为什么返回值类型是double,而不是float?
常量没有限定符情况下,编译器为确保有足够大的精度,按最大宽度字节转换。因此1+1.0看作double类型,你可以在1.0后面加个限定符f,则编译器便按float转换,返回4字节。

sizeof(string)为何返回4?
2) 基本类型是指前面提到的像char、short、int、float、double这样的内置数据类型,这里所说的“数据宽度”就是指其sizeof的大小。由于结构体的成员可以是复合类型,比如另外一个结构体,所以在寻找最宽基本类型成员时,应当包括复合类型成员的子成员,而不是把复合成员看成是一个整体。但在确定复合类型...

sizeof()是什么意思啊!
sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位)。char是c语言中基本类型,一般char类型占1个字节。sizeof(char)的结果是,1。sizeof:计算数据类型长度 char = 1 int 2,long 4 int a[6];sizeof (a) 2*6= 12 单位都是字节。float 4 ...

C语言sizeof('a')的返回值为什么是4,而不等于sizeof(char)
C语言里就是把字符常量当做了整型处理的.在c中'a'这类的是代表着'a'这类的ACSII的值..而在c++中'a'这类就代表一个字符常量 sizeof 'a'所以在VC++里,为 4 不为2 的原因.你注意看我第一句话..在c中这个字符常量是被当做一个整形来处理的 ...

相似回答