问题:‘ ’ 和“ ‘ 的区别? char 和const 区别,当然还有……
先附上原程序:
int 实际上可以理解,是定义的局部变量ch在内存中实际以int类型形式存储(char类型字符也是整形数据),那么问题就来了!
问题2:const char * 在内存中是怎样存储的?为什么说间接寻址级别不同?
我是这样想的:既然类型不匹配,就用到强制类型转换,改为:
if(ch==(char)SPACE)
编译没有错误,运行之后,结果如下:

显然结果不符合要求!问题:
问题3:为什么输入空格,而后输出时,就成了”!“号了呢?
而后以把预定义改为:
#define SPACE ' '
运行成功:

问题4:' ' 和” “ 有什么区别?
难道是第一个是单字符,而第二个是字符串?但是和本题有什么联系呢?
初学者,见谅! 内存 存储
[解决办法]
事实上你#define SPACE " "这个" ",在内存中其实是[' ','\'],因为字符串都会在后边自动帮你黏上个'\0'的。如果你单纯只是想比较字符而已,那么你应该改成 #define SPACE ' '。' '是字符," "是字符串。' ' 长度是1," "长度是2。字符可以当做数字进行运算,字符串不行。比较字符可以直接==,比较字符串必须挨个比,或者调用strcmp进行比较。
[解决办法]
' ' 表示一个空格字符," "表示一个字符串,这个字符串中有两个字符,一个是空格,一个是隐含的一个结束子符'\0',ascll码值为0.
char 表示一个字符类型,const char *表示一个指向const字符的字符指针
[解决办法]
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……