共计 1149 个字符,预计需要花费 3 分钟才能阅读完成。
Summary
1)C 语言中的 单引号
用来示意 字符字面量
;字符字面量的 实质是一个整数
;
2)C 语言中的 双引号
用来示意 字符串字面量
;字符串字面量的 实质是一个指针(内存地址)
;
3)低于 0x08048000
这个值的内存地址都是不能间接拜访的,拜访就会段谬误;
4)留神:char 类型
和char* 类型
要用正确的字面量进行初始化
;尽管 char a = “”; char* s = ‘a’; 都能编译的过,但应用的时候就会出意想不到的 段谬误
。
5)字符字面量和字符串字面量的混同应用在 C 编译器中能够编的过,但要留神 warning,工程中对于所有的 warning 肯定都要当成 error 来解决
。
单引号和双引号
C 语言中的 单引号
用来示意 字符字面量
; 字符字面量的实质是一个整数
,’a’ 在内存中占 1 个字节,’a’+1 示意 ’a’ 的 ASCII 码值加 1,后果为 ’b’。
C 语言中的 双引号
用来示意 字符串字面量
;字符串字面量的实质是一个内存地址(地址值),”a” 在内存中占有 2 个字节,”a”+1 示意指针运算,后果指向 ”a” 中的结束符 ’\0’。
-
代码浏览:
char* p1 = 1; char* p2 = '1'; char* p3 = "1"; printf("%s, %s, %s", p1, p2, p3); printf('\n'); printf("\n");
代码解析:
p1 用一个整数字面量 1 进行初始化,有 warning,但能够编的过,因为指针实质也是一个 32(64)位的整数值 p2 用一个字符字面量 '1' 进行初始化,同 p1。字符 '1' 实质也是一个整数,值为 49 p3 用一个字符串字面量 "1" 进行初始化,字符串字面量的实质是一个指针(内存地址),没有问题 printf(param1, ...)的第一个参数是一个指针,地址值 printf('\n')能够编的过,然而 warning,同 p2,应用 10 作为一个地址值传给 printf 函数 printf("\n")能够编的过,应用一个字符串字面量作为参数,换行 综上:p1 p2 printf('\n')都是能够编的过,然而有问题的语句,在进行打印的应用就会段谬误,因为应用了谬误的地址值,拜访了不该拜访的内存,野指针!!!
-
代码浏览:
char c = " "; while(c == "\t" || c == "" || c =="\n") {scanf("%c", &c); }
代码解析:
c 的初始化:应用一个只有空格字符的字符串字面量进行初始化;实际上是用一个指针(内存地址值)进行初始化 因为 char 类型占 1 个字节,指针类型占 4 字节(32 位),所以会产生截断 再去进行 while 循环的判断,第一次就为 false,不会进到循环中 所以要正确判断字符类型和字符串类型,确保应用的类型是正确的:批改,将 "\t" 等都改成 '\t'。
本文总结自“狄泰软件学院”唐佐林老师《C 语言进阶课程》。
如有错漏之处,恳请斧正。