1.下面函数的执行结果是输出7 4 4
char str[]=”xunlei”;
char *p=str;
int n=10;
printf(“%d,%d,%d\n”,sizeof(str),sizeof(p),sizeof(n));
解:
sizeof(str),str是字符数组,所以第一个是7个字节
sizeof§, str的首元素地址赋给指针p,指针总占4个字节
sizeof(n), int型整数,所以4个字节
char str[]=“xunlei”;
char str2[]={‘x’,‘u’,‘n’,‘l’,‘e’,‘i’};
//sizeof(str)计算’\0’,sizeof(str2)不计算’\0’
2.以下关于类初始化成员变量的描述正确的是B C D
A static成员变量可在类定义内初始化
B const成员变量必须在构造函数的初始化列表中初始化
C 成员变量可以在构造函数中初始化
D 数组成员是不能在初始化列表里初始化的
3.不能被重载的运算符 1、. (成员访问运算符) 2、.* (成员指针访问运算符) 3、:: (域运算符) 4、sizeof(长度运算符) 5、?: (条件运算符)
4.有以下程序,程序运行后的输出结果是888
main()
{ int a=666,b=888;
printf("%d\n",a,b);
}
printf函数参数的入栈顺序是从右到左(888先入栈,接着666入栈)。所以从栈里面读取一个数据时,只会读取最后入栈的数据,也即666.
5.若有 18 个元素的有序表存放在一维数组 A[19] 中,第一个元素放 A[1] 中,现进行二分查找,则查找 A [ 3 ]的比较序列的下标依次为9,4,2,3
解:
注意题目意思:第一元素放到A[1],说明该数组下表1开始。第一次查找 , high = 18, M1 = (1 + 18)/2 = 9 ; A[3] < A[9],high = M1 -1 = 8; M2 = (1 + 8) / 2 =4, 依次类推
6.在c语言程序中,当调用函数时,正确的是 C
A 全局变量开始占用存储单元
B 形参不需要分配存储单元
C 内部变量开始占用存储单元
D 外部变量开始占用存储单元
解:
(1)extern是外部变量,这个变量在程序外部定义,在调用函数前后是始终存在的。
(2)全局变量在函数调用前后始终是占用内存的。
(3)形参本来是不占用存储单元的 但是 只有当函数调用时,发生实参向形参的数据传递时,系统才分配给形参存储单元,调用完之后就释放。
7.
(1)int *p[4]; //表示指针数组,有四个元素,每个元素都是整型指针。
(2)int (*p)[4]; //表示行指针,所指对象一行有四个元素。
(3)int *p(void); //表示函数,此函数无参,返回整型指针。
(4)int(*P)(void) ;//表示函数指针,可以指向无参,且返回值为整型指针的函数。
8.数组是一种对象
9.有以下程序,程序运行后的输出结果是666
解:
printf函数参数的入栈顺序是从右到左(888先入栈,接着666入栈)。所以从栈里面读取一个数据时,只会读取最后入栈的数据,也即666
10.下面的代码输出是 4 8
union中的所有成员相对于基地址的偏移量都为零。d.x,d.y和d.s.x的起始地址都相同,共享内存空间,给任意一个变量赋值,其他两个变量也会赋相同的值