编程小白在进步 发表于 2022-9-1 17:08:03

char后面跟了双引号会怎样

#include<stdio.h>
int main(void)
{
        char fuu = "C";
        printf("%c=%d\n",fuu,fuu);

        return 0;
}

编程小白在进步 发表于 2022-9-1 17:09:28

刚刚学习,不太懂,我给C这个字符上加的双引号,编译也能成功,但是肯定不争取,但是计算机怎么处理的有大佬分析一下嘛

桃花飞舞 发表于 2022-9-1 17:15:09

本帖最后由 桃花飞舞 于 2022-9-1 17:17 编辑

编程小白在进步 发表于 2022-9-1 17:09
刚刚学习,不太懂,我给C这个字符上加的双引号,编译也能成功,但是肯定不争取,但是计算机怎么处理的有大 ...

加了双引号就是字符串了在内存中是 'C' '\0' 是两个字符 由于是char类型 用%c 输出的也就是一个字节,所以截取了C这个字符。用%d值应该不是67吧。算了这个我也不太清楚了,不过感觉没意义

编程小白在进步 发表于 2022-9-1 17:18:02

桃花飞舞 发表于 2022-9-1 17:15
加了双引号就是字符串了在内存中是 'C' '\0' 是两个字符 由于是char类型 用%c 输出的也就是一个字节, ...

你说的截取啥意思,最后打印的结果很奇怪是这样的[] = 16

桃花飞舞 发表于 2022-9-1 17:28:53

本帖最后由 桃花飞舞 于 2022-9-1 17:53 编辑

编程小白在进步 发表于 2022-9-1 17:18
你说的截取啥意思,最后打印的结果很奇怪是这样的[] = 16

也就是说char fuu; 的意思是在内存中分配一个字节空间, fuu = "C" 是把 "C"这个字符串放到fuu这个空间里面,而"C"是由 'C''\0'组成的是两个字节,所以放不下会溢出, 而读取的时候读取的是fuu对应的这一个字节里面的数据,所以只要知道这个字节里的数据是什么就可以解释输出的结果了,按数组的思想,数据是线性的,即便溢出了 也在接下来的空间中,读取数据只是按地址找一段数据类型的空间,我用了截取.怕是我说多了你也是不懂的。'C' 的ASCII 值是67'\0' 的ASCII的值是0你的输出结果是比较奇怪,, 我的输出是$=36   正好$符号的ASSCII码值是36而内存中是0010 0100 0011 0001      如果取   中间的8位就是0100 0011 = 67 正好是字符C而你的[]的ASCII码值并不是 91 93我也不会解释

dolly_yos2 发表于 2022-9-1 17:54:06

一个小提示:编译这段代码产生了警告
4:14: warning: incompatible pointer to integer conversion initializing 'char' with an expression of type 'char ' [-Wint-conversion]
      char fuu = "C";
             ^   ~~~
1 warning generated.

编程小白在进步 发表于 2022-9-1 18:09:32

桃花飞舞 发表于 2022-9-1 17:28
也就是说char fuu; 的意思是在内存中分配一个字节空间, fuu = "C" 是把 "C"这个字符串放到fuu这个空间 ...

谢谢了,虽然不是很懂
页: [1]
查看完整版本: char后面跟了双引号会怎样