了解类型系统的重要性 一点个人评论(对发行量最大那本C程序设计教材) -例2:读者难以理解编译器就下面代码报告的错误 long a[10][10]; main(){*(a+1)=a+1;} 该函数在Linux.上用GCC编译,报告的错误如下: incompatible types when assigning to 'long int10] from type 'long int (*)[10]' -计算机专业的新生从该书能较好地学习程序设计, 但难以同时了解怎样学习和掌握编程语言 下面在从另一角度举例说明了解类型系统的重要性
了解类型系统的重要性 • 一点个人评论(对发行量最大那本C程序设计教材) – 例2: 读者难以理解编译器就下面代码报告的错误 long a[10][10]; main( ) { *(a + 1) = a + 1; } – 该函数在Linux上用GCC编译, 报告的错误如下: incompatible types when assigning to ‘long int[10]’ from type ‘long int (*)[10]’ – 计算机专业的新生从该书能较好地学习程序设计, 但难以同时了解怎样学习和掌握编程语言 下面在从另一角度举例说明了解类型系统的重要性12
了解类型系统的重要性 例1 -在C中称&为地址运算符,&a为变量a的地址 一数组名代表数组 a,&a-→ a0][0] 第一个元素的地址 a0]l1] 若有long a[10[10],那么a al1]0] 和&a的值一样 a1]l1] a和&a在使用上是否有区别? ●。● 解答: 用4个C文件在编译时输出的 a9]0] 程序错误信息或运行结果来提示 a[911
了解类型系统的重要性 • 例1 – 在C中称&为地址运算符,&a为变量a的地址 – 数组名代表数组 第一个元素的地址 – 若有long a[10][10],那么a 和&a的值一样 – a和&a在使用上是否有区别? 解答: 用4个C文件在编译时输出的 程序错误信息或运行结果来提示 … … 13 … … a[9][0] a[9][1] a[1][0] a[1][1] … … a[0][0] a[0][1] … … a, &a →
了解类型系统的重要性 文件1: typedef int A10]20]; Aa; A *fun() return(a); 该函数在Linux.上用GCC编译,报告的错误如下: 第4行:warning:return from incompatible pointer type 解释:表达式a的类型不是A的指针类型 14
了解类型系统的重要性 文件1: typedef int A[10][20]; A a; A *fun( ) { return(a); } – 该函数在Linux上用GCC编译, 报告的错误如下: 第4行:warning: return from incompatible pointer type – 解释:表达式a的类型不是A的指针类型 14
了解类型系统的重要性 文件2: typedef int A10]20]; Aa; A *fun(){ return(&a); 该函数在Linux.上用GCC编译时,没有错误 解释: 表达式&a的类型是A的指针类型 15
了解类型系统的重要性 文件2: typedef int A[10][20]; A a; A *fun( ) { return(&a); } – 该函数在Linux上用GCC编译时,没有错误 – 解释: 表达式&a的类型是A的指针类型 15
了解类型系统的重要性 文件3: typedef int A10]20]; typedef int B 20]; Aa; B *fun()t return(a); 该函数在Liux上用GCC编泽时,没有错误 解释: a的类型是B类型(即A的元素类型)的指针类型
了解类型系统的重要性 文件3: typedef int A[10][20]; typedef int B[20]; A a; B *fun( ) { return(a); } – 该函数在Linux上用GCC编译时,没有错误 – 解释: a的类型是B类型(即A的元素类型) 的指针类型16