user-0 提问: 'b'在内存中占几个字节？

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！

user: user-2
content: 引用 38 楼 lin5161678 的回复:[quote=引用 37 楼 gz_qmc 的回复:] "B"在内存中占2个字节 因为""就自动化成char组类型,而且不论多少都在末尾加0  'b'等同于立即数98 在内存中所占字节和机器位数有关系 也就是说 在16位机器上, 立即数占2字节 在32位机器上, 立即数占4字节  char  x = 'b'; 是先确定了x的空间为1字节,再给他强制赋予一个数据而已 还有疑虑的你们可以在机器上试一下 char  x=1234; 1234是个立即数 但通过赋值后强制把1234的所占空间掐断了 所以 char x='b' 等价于 char x=98   在16位机器上等价于  char x=0x0062; 在32位机器上等价于  char x=0x00000062;     'b'占据多少内存 和 多少位机器 没有关系  'b'是int 而int 占据多大内存由编译器决定   别误导别人 [/quote]  实际上楼上说的不错，我记得c++没有标准说一个int占多少个字节，完全是由编译器所决定的，vc6.0一个int是两个字节，vs2010是四个字节，遇到这种问题直接在编译器中sizeof看大小就好

user: user-3
content: 引用 49 楼 fefe82 的回复:[quote=引用 10 楼 lin5161678 的回复:] [quote=引用 9 楼 zxh707wk 的回复:] 这段转换规则和 'b'是什么类型毫无关系  不同类型转换为同一个类型  那么  sizeof 'b'  这里 不同类型分别指的是什么类型 谁是类型A 谁是类型B ?? [/quote]  sizeof 之后，所有这些转换都不发生。[/quote]你回复错了人

user: user-3
content: 引用 54 楼 Z_R_Z_798205 的回复:'b' 是一个 int 型,"B" 是一个指针错了 "B"是一个数组 不是指针

user: user-4
content: 'b' 是一个 int 型,"B" 是一个指针

user: user-3
content: 引用 51 楼 u010370871 的回复:[quote=引用 38 楼 lin5161678 的回复:] [quote=引用 37 楼 gz_qmc 的回复:] 'b'等同于立即数98 在内存中所占字节和机器位数有关系 也就是说 在16位机器上, 立即数占2字节 在32位机器上, 立即数占4字节  'b'占据多少内存 和 多少位机器 没有关系  'b'是int 而int 占据多大内存由编译器决定   别误导别人 [/quote] [/quote] 我反驳的是这段话 楼上认为int 占用多少内存是由机器位数决定 实际上 如你所说 是有编译器决定的

user: user-5
content: 引用 10 楼 lin5161678 的回复:[quote=引用 9 楼 zxh707wk 的回复:] 这段转换规则和 'b'是什么类型毫无关系  不同类型转换为同一个类型  那么  sizeof 'b'  这里 不同类型分别指的是什么类型 谁是类型A 谁是类型B ?? [/quote]  sizeof 之后，所有这些转换都不发生。

user: user-6
content: 大小写是一样的，8个bit加颜色属性8个bit所以共16个bit，你是写驱动吗？

user: user-7
content: 搞单片机的路过 37楼的说法似乎有道理 我用8位单片机  sizeof(‘b') 竟然是 1     但单片机int 型占2字节 不知道单片机是不是不一样  32位单片机  就跟你们说的一样了 手上没16位的，没得试

user: user-8
content: 引用 6 楼 u013929023 的回复:你可以在编译器里用sizeof()函数看一下就行  呵呵，sizeof可不是函数哦，小朋友

user: user-9
content: 引用 2 楼 taodm 的回复:C语言里，'b'占和int一样的字节，因为它就是int类型的。 C++里，占和char一样的字节，因为它是char类型的。 这是C和C++的重要区别之一。 建议换本好点的教材，这些基本知识都应该写在上面的。+1

user: user-3
content: 引用 43 楼 u013470052 的回复:'b'一个。"b"两个。 别听那个乱说，老谭害人不浅。错了 'b'不是一个字节 他的数据类型是 int

user: user-10
content: 'b'一个。"b"两个。 别听那个乱说，老谭害人不浅。

user: user-10
content: 引用 13 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-11
content: 引用 2 楼 taodm 的回复:C语言里，'b'占和int一样的字节，因为它就是int类型的。 C++里，占和char一样的字节，因为它是char类型的。 这是C和C++的重要区别之一。 建议换本好点的教材，这些基本知识都应该写在上面的。 学习了

user: user-12
content: 楼主你手残吗？ sizeof("A") sizeof("a") sizeof("Z") sizeof("z") sizeof('A') sizeof('a') sizeof(L"a"); sizeof(L'a'); 你自己去实验吧，我说完你也记不住

user: user-13
content: 先把测试写出来，gcc编译通过，运行结果在注释  #include <stdio.h>  int main() { 	char a = 'a'; 	printf("%d\n", sizeof(int)); //4 	printf("%d\n", sizeof(char));//1 	printf("%d\n", sizeof a);//1 	printf("%d\n", sizeof 'a');//4 	printf("%d\n", sizeof "a");//2 	return 0; }

user: user-14
content: "B"在内存中占2个字节 因为""就自动化成char组类型,而且不论多少都在末尾加0  'b'等同于立即数98 在内存中所占字节和机器位数有关系 也就是说 在16位机器上, 立即数占2字节 在32位机器上, 立即数占4字节  char  x = 'b'; 是先确定了x的空间为1字节,再给他强制赋予一个数据而已 还有疑虑的你们可以在机器上试一下 char  x=1234; 1234是个立即数 但通过赋值后强制把1234的所占空间掐断了 所以 char x='b' 等价于 char x=98   在16位机器上等价于  char x=0x0062; 在32位机器上等价于  char x=0x00000062;

user: user-15
content: 引用 34 楼 zxcvbnm0014 的回复:[quote=引用 2 楼 taodm 的回复:] C语言里，'b'占和int一样的字节，因为它就是int类型的。 C++里，占和char一样的字节，因为它是char类型的。 这是C和C++的重要区别之一。 建议换本好点的教材，这些基本知识都应该写在上面的。 不要误导新人，int在16位系统占2字节，在32位系统占4字节。char占一个字节，字符串有个结束符标志，可以说是占2个字节。[/quote] 人家好像没有说int占多少字节吧，那么激动做什么

user: user-3
content: 引用 37 楼 gz_qmc 的回复:"B"在内存中占2个字节 因为""就自动化成char组类型,而且不论多少都在末尾加0  'b'等同于立即数98 在内存中所占字节和机器位数有关系 也就是说 在16位机器上, 立即数占2字节 在32位机器上, 立即数占4字节  char  x = 'b'; 是先确定了x的空间为1字节,再给他强制赋予一个数据而已 还有疑虑的你们可以在机器上试一下 char  x=1234; 1234是个立即数 但通过赋值后强制把1234的所占空间掐断了 所以 char x='b' 等价于 char x=98   在16位机器上等价于  char x=0x0062; 在32位机器上等价于  char x=0x00000062;     'b'占据多少内存 和 多少位机器 没有关系  'b'是int 而int 占据多大内存由编译器决定   别误导别人