本节书摘来自华章社区《C语言程序设计:问题与求解方法》一书中的第2章,第2.17节提高部分,作者:何 勤,更多章节内容可以访问云栖社区“华章社区”公众号查看
2.17 提高部分2.17.1 对字符量的进一步说明由于英文常用字符集中的字符数(比如ASCII字符集中有128个字符)通常比C语言字符集中的字符数(共有92个)多,C语言中允许使用一种特殊形式的字符常量来表示英文常用字符,这就是以反斜杠开头的转义字符,此时反斜杠后面的字符将转变成一种另外的意义。转义字符的名称由此而来。最常用的转义字符是'n' , 用来表示换行。其他常用转义字符见表2-6。
在源程序正文部分书写转义字符的方法与普通字符类似,都必须用单引号括住,比如'n'。但是在格式化输出库函数printf()的格式控制串或字符中书写转义字符时不要用单引号括住,比如printf("hellon")。注意,整型常量6和(数字)字符常量'6'是不一样的。整型常量6的值为6,在计算机内部表示为二进制的110,而(数字)字符常量'6'的ASCII码值为 54,等于8位二进制的 00110110;也就是说,(数字)字符常量'6'在计算机内部的通常形式是一个8位二进制码00110110。有少量计算机不是使用ASCII码来表示英文字符的,而是使用别的编码标准。为使你编写出来的程序也能够在这一类的计算机上运行,最好不要在程序中将用到的字符常量与一个具体的ASCII码 值关联起来。字符量还可以用格式符%d输出,此时输出的通常是该字符所对应的ASCII码。
2.17.2 变量地址的运算符 & 和变量占用的内存字节数的运算符 sizeof已知在VC++ 6.0编译环境下, int型整型变量 num 的内存单元占据了4字节大小的内存空间。假设所对应的内存字节的地址分别是二进制的10001100、10001101、10001110、10001111。请问变量 num的地址是多少? 变量的值与变量的地址有关吗?变量的地址就是所有这些连续字节地址中的最小地址—100001100 。而变量的值就是存放在这四个连续字节中的、总长度为32位的二进制位串所构成的数。如何得到一个变量的地址呢?在例题2. 2第14行格式化输入函数scanf的调用中,我们用到了运算符 & 来得到变量的地址。我们也可用此运算符使用printf函数来输出变量的内存地址,不过通常这样做没什么意义。要知道一种类型的变量在内存空间占用的字节数,可以使用运算符sizeof(类型名)。例如,通过sizeof(int)可得到int型变量在内存中占用的字节数。【例题2.8】示例程序。
1 #include<stdio.h> 2 int main(void) 3 { 4 int year=26 , last ; 5 char ch1='d ' ; 6 printf("变量year的值=%d , ",year); 7 printf("变量year的地址=%p, " , &year); 8 printf("变量year的字节数=%d\n" , sizeof(year)); 9 printf( "变量last的值=%f ," , last); 10 printf("变量last的地址=%p ," , &last); 11 printf("变量last的字节数=%d\n" , sizeof(last)); 12 printf("变量ch1的值=%c ," ,ch1); 13 printf("变量ch1的地址=%p , ",&ch1); 14 printf("变量ch1的字节数=%d\n", sizeof(ch1)); 15 return 0 ; 16 }说明:要输出变量的地址,必须用格式符%p。【练习1】根据此题运行结果,请你制作并填写一张类似表2-7的表格,即把每个变量占用的字节数、变量的地址、变量的值都填写在此表中。
注意:变量的地址(类似于自动冰箱格子的编号)与变量所代表的内存中所存放的数值(类似于自动冰箱这一格中所存放的原材料)之间的重要区别。对于以上这些十六进制的地址,结论是 :1)变量year所对应的连续两个字节的内存地址分别是FFBE和FFBF。2)变量last 所对应的连续两个字节的内存地址分别是 FFC0和FFC1。3)FFBE加2等于FFC0;FFC0加2等于FFC2。【练习2】修改例题2.8中变量的初始值,看看打印出来的各种数据有何变化。
相关资源:C语言高阶编程教程(C语言进阶教程)