【2.33】参考答案: C
【2.34】参考答案: ① C ② A ③ C 【2.35】参考答案: C 【2.36】参考答案: B
注释:函数fun进行了递归调用,实际进行的运算是5×4×3×2×1×3×10。主函数内说明的局部变量w屏蔽了外部变量w,所以在主函数中外部变量w是不可见的,在调用printf函数时表达式\中w的值是10。 【2.37】参考答案: D
注释:main函数三次调用了函数funa,在funa函数中的静态变量c仅在第一次调用时进行了初始化,再次调用时不再对静态变量赋初值。 【2.38】参考答案: B
注释:main函数和num函数中都说明了变量a和b,由于它们是内部变量,所以它们分别在说明它们的函数内有效。外部变量x和y在函数num之后被说明,而在num函数中又要引用它们,所以在num函数中用关键字\说明变量x和y是一个外部变量,也就是通知计算机这两个变量在fun函数以外被说明,此处不是定义两个int型变量。 【2.39】参考答案: D
注释:函数f中的变量c是静态变量,仅在第一次调用函数f时它被初始化为3,第二次调用函数f时c的值是4,第三次调用函数f时c的值是5。 【2.40】参考答案: D
【2.41】参考答案: D
注释:程序中有三个\分别在三个不同的函数中,这三个\都是自动变量,所以三个\分别局部于三不同的函数,在三个函数中对\的操作互不影响。 【2.42】参考答案: A 【2.43】参考答案: A
注释:*(++p)和*++p都是指针变量值前加1,第一次指向a[1],第二次指向a[2];a+3是a[3]的地址。 【2.44】参考答案: C
注释:②句没有语法错误,但是a+6指向数组之外,因为a是a[0]的地址,a+1是a[1]的地址,a+2是a[2]的地址,显然数组a没有a[6]分量。③句错误,因为a[1]是地址常量,它是a[1][0]的地址,对于地址常量是不可以进行赋值运算的。 【2.45】参考答案: ① D ② A
注释:如果FMT定义为\,则输出的16进制数据用小写字母表示。 【2.46】参考答案: A
注释:语句\表示将数组a中元素a[0]的地址赋给指针变量p,则p就是指向数组首元素a[0]的指针变量,\是取数组首元素的地址。对于指向数组首址的指针,p+i(或a+i)是数组元素a[i]的地址,*(p+i)(或*(a+i))就是a[i]的值。 【2.47】参考答案: B 【2.48】参考答案: D 【2.49】参考答案: D 【2.50】参考答案: A
注释:变量g是指向函数的指针,(*g)(a,b)是调用指针g所指向的函数。 【2.51】参考答案: C
注释:p是指针,pp是指向指针的指针。 【2.52】参考答案: A
注释:对于指向数组的指针变量可以做下标运算,p[i]和alpha[i]都是指向字符串的首地址,*p[i]取出字符串的第一个字符。
【2.53】参考答案: ① D ② A ③ D ④ D ⑤ B
注释:pp是一个二维指针数组,pp+1指向数组的第二维,*(pp+1)是第二维的起始地址,
**(pp+1)是第二维第一个元素的地址,***(pp+1)是第二维第一个元素的内容,所以,①的参考答案应选D。*(pp+1)+1是第二维第二个元素的地址,*(*(pp+1)+1)是第二维第二个元素,(*(*(pp+1)+1))[4]则是第二维第二个元素所指字符串下标为4的元素,即是字符w,故③应当选D。
【2.54】参考答案: ① B ② C 【2.55】参考答案:D 【2.56】参考答案:C
注释:联合体成员的取值是最后一次给成员赋的值。 【2.57】参考答案: B
注释:整型数组i和字符数组c共用存储空间,给i赋值也等于给c赋值,所以s->c[0]=0x39,所以输出9。 【2.58】参考答案:A
注释:基本概念。EOF是由C语言在头文件stdio.h中定义的,用户可以直接使用。