第6章运行时存储空间的组织和管理(免费阅读).ppt

第6章运行时存储空间的组织和管理(免费阅读).ppt

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 例 题 3 下面的程序运行时输出3个整数。试从运行环 境和printf的实现来分析,为什么此程序会有3 个整数输出? main() { printf(“%d, %d, %d\n”); } 例 题 4 main() { char *cp1, *cp2; ? cp1 = 12345; cp2 = abcdefghij; strcpy(cp1,cp2); printf(cp1 = %s\ncp2 = %s\n, cp1, cp2); } 在某些系统上的运行结果是: cp1 = abcdefghij cp2 = ghij 为什么cp2所指的串被修改了? 例 题 4 因为常量串“12345”和“abcdefghij”连续分配在常数区 执行前: 1 2 3 4 5 \0 a b c d e f g h i j \0 ? ? cp1 cp2 例 题 4 因为常量串“12345”和“abcdefghij”连续分配在常数区 执行前: 1 2 3 4 5 \0 a b c d e f g h i j \0 ? ? cp1 cp2 执行后: a b c d e f g h i j \0 f g h i j \0 ? ? cp1 cp2 例 题 4 因为常量串“12345”和“abcdefghij”连续分配在常数区 执行前: 1 2 3 4 5 \0 a b c d e f g h i j \0 ? ? cp1 cp2 执行后: a b c d e f g h i j \0 f g h i j \0 ? ? cp1 cp2 现在的编译器大都把程序中的串常量单独存放在只读 数据段中,因此运行时会报错 例 题 5 func(i,j,f,e) short i,j; float f,e; { short i1,j1; float f1,e1; printf(i,j,f,e); printf(i1,j1,f1,e1); } main() { short i,j; float f,e; func(i,j,f,e); } Address of i,j,f,e = …36, …42, …44, …54(八进制数) Address of i1,j1,f1,e1 = …26, …24, …20, …14 例 题 5 func(i,j,f,e) Sizes of short, int, long, float, short i,j; float f,e; double = 2, 4, 4, 4, 8 { (在SPARC/SUN工作站上) short i1,j1; float f1,e1; printf(i,j,f,e); printf(i1,j1,f1,e1); } main() { short i,j; float f,e; func(i,j,f,e); } Address of i,j,f,e = …36, …42, …44, …54(八进制数) Address of i1,j1,f1,e1 = …26, …24, …20, …14 例 题 5 func(i,j,f,e) Sizes of short, int, long, float, short i

文档评论(0)

1亿VIP精品文档

相关文档