char s[]=\char *p = NULL; p = s;
则下述叙述正确的是
A s和p完全相同
B 数组s中的内容和指针变量p中的内容相等 C 数组s的长度和指针p指向的字符串长度相等 D *p与s[0]相等
30. 以下代码中,有错误的是:
A char *a = \
B char a[8];\\na = \C char *a; \\na = \D char a[8] = \
31. c语言的编译系统对宏的处理是
A 在程序运行时进行的 B 在程序链接时进行的
C 在对源程序中其他成分正式编译之前进行的 D 和C程序中的其他语句同时进行编译的
32. 定义如下联合体类型和变量 union {
unsigned char c[2]; unsigned int i; }m;
m.i = ~0xFF;
则在little-endian字节序的机器上m.c[0],m.c[1]分别为
A 0,0xFF B 0xFF,0 C 0,0 D 0xFF,0xFF
33. 语句int(*p)()的含义是:
A p是一个指向一维数组的指针变量
B p是指针变量,它指向一个整型数据的指针 C p是一个指向函数的指针,该函数的返回值为整型 D 以上答案都不对
34. 有如下程序片断,说法正确的是: char *p = \*(p+1) = 'w';
A 语法错误,编译通不过
B 链接通不过 C 执行错误 D 都不对
35. 下列关于动态库的说法错误的是:
A 利用动态库可以实现软件的在线升级
B 多个程序通过共享动态库可以减少对磁盘空间及内存的需求 C 动态库的在线升级需要先卸载再重新加载
D 动态库中的全局变量与函数的逻辑地址,是在编译阶段确定的
36. 对以下C语言类型声明语句的解释正确的是 double * const cptr;
A cptr指向的地址以及地址内的内容均可以改变 B cptr指向的地址不能改变 C cptr指向的地址内的内容不能改变
D cptr指向的地址以及地址内的内容均不能改变
37. 某函数内有如下代码 static int a = 3; static int b; int c = 4; int d; b = 5; d = 6; ….
编译时,下面哪一句并不生成相应的赋值的机器指令:
A static int a = 3 B int c = 4 C b = 5 D d = 6
38. 以下不能正确进行字符串赋初值的语句是
A char str[5]=\B char str[]=\C char *str=\
D char str[5]={'g','o','o','d'};
39. 下列叙述中错误的是
A 局部变量必须赋值之后才能使用
B 构成C程序的基本单位是函数,任意函数名都可以由用户命名 C 用户申请到的堆内存中存放的数据是不确定的 D 分号是C语句之间的分隔符,是语句的一部分
40. char *p = NULL; int a[10] = {0}; sizeof(p) = ? Sizeof(a) = ?
A 1,4 B 1,40 C 4,4 D 4,40
41. #define func_1(a,b) a+b #define func_2(a,b,c) a*(b+a*c)
int func_result = func_1(2,3)+func_2(func_1(2,4),5,3); result = ?
A 83 B 143 C 41 D 99
42. c语言中定义数组元素时,数组下标的数据类型允许是:__; 引用数组元素时,下标允许的数据类型是:__。
A常量表达式;常量表达式 B整形常量或表达式;常量表达式 C整形常量;整形常量或表达式 D常量表达式;整形常量或表达式
43.已知如下变量定义 int i = 0, a[100]; 下列表达式错误的是:
A sizeof(int) B sizeof(a[100]) C sizeof int D sizeof i
44. struct test {}; sizeof(struct test) = ?
A 0 B 1 C 2 D 4
45. 如果存在结构体struct stack{int *p, int cnt = 0}变量 stackTest,在执行一段时间以后,想要清空stackTest,以下正确的代码是?
A stackTest.p = NULL; stackTest.cnt = 0;
B if (stackTest.p) free(stackTest.p); stackTest.cnt = 0;
C if (stackTest.p) free(stackTest.p); stackTest.p = NULL; stackTest.cnt = 0; D free(stackTest.p);
46. 若已定义 char s[10]; 则在下面表达式中不表示s[1]的地址是
A s+1 B s++ C &s[0]+1 D &s[1]
47. 有定义语句:int a[]={1,2,3,4,5,6,7},*p=a,*q=&a[5]; 则下列表达式中值不等于5的是
A *q-- B *--q C --*q D q-p
48. 如有下面的代码 WORD32 a[] = {1, 2, 3}; WORD32 b = 0; WORD32 c = 0; b = &a[2] - &a[0];
c = (BYTE*)(&a[2]) - (BYTE*)&a[0]; 则执行之后, b和c各等于
A 2, 2 B 8, 8 C 2, 8 D 8, 2
49. WORD32 *(*ptr)(); 则以下叙述中正确的是
A ptr是指向一维数组的指针变量
B ptr是指向WORD32型数据的指针变量
C ptr是指向函数的指针,该函数返回一个WORD32型数据
D ptr是指向函数的指针,该函数的返回值是指向WORD32型数据的指针
50. char str1[] = \char str2[] = \
const char str3[] = \const char str4[] = \const char *str5 = \const char *str6 = \char *str7 = \char *str8 = \
cout << ( str1 == str2 ) << endl; cout << ( str3 == str4 ) << endl; cout << ( str5 == str6 ) << endl; cout << ( str7 == str8 ) << endl; 输出为:
A 0 1 0 1 B 0 0 1 1 C 0 1 1 0 D 1 0 0 1
51. 拥有36位地址线的32位处理器进程最大虚拟空间是
A 2G B 4G C 64G D 以上都不对
52. 以下两段代码执行的结果分别为: 代码一
#include
A = 10, B, C }x;
#define A 20 int main() {
printf(\return 0; }
代码二
#include
A, B, C }x;
int main() {
printf(\return 0; }
A C=22,C=22 B C=12,C=22