问题:当printf函数和scanf函数用字符串字面量作为参数时,传递的是什么呢?
答案:是“字符串字面量”,printf函数和scanf函数都接收char *类型的值作为它们的第一个参数,可参考《scanf 中 & 的应用本质》。在C语言中,字符串字面量是作为数组来存储的,编译器会将它看作是char *类型的指针。如以下代码:
printf("abc");
当调用printf函数时,会传递"abc"的地址(即指向存储字母a的内存单元的指针)。
拓展:
-
本质上,C语言把字符串字面量作为字符数组来处理,当编译器在程序中遇到长度为n的字符串字面量时,它会为字符串字面量分配长度为n+1的内存空间。这块字符空间将用来存储字符串字面量中的字符,以及一个用来标志字符串末尾的额外字符(空字符)。
a = "abc";字符串字面量“abc”是作为有4个字符的数组来存储的(a、b、c和\0)。
-
空字符(’\0’)是一个所有位都为0的字节,用转义序列\0来表示,它的码值为0; 零字符(‘0’)则有不同的码值(ASCII中为48)。
博客探讨了C语言中printf和scanf函数用字符串字面量作参数时传递的内容,指出传递的是字符串字面量,编译器将其看作指针。还介绍了C语言把字符串字面量作为字符数组处理,会分配n+1长度内存,包含末尾空字符。
69

被折叠的 条评论
为什么被折叠?



