1. 执行完C++程序中的下列3条语句后,c指向( )。
int a, b,*c=&a;
int *p=c;
p=&b;
A.p
B.c
C.b
D.a
解析:语句“int a,b,*c=&a;”执行完后,指针c存放变量a的地址。
语句“int*p =c;”执行完后,指针p存放变量a的地址。
语句“p=&b;”执行完后,指针p存放变量b的地址,但是指针c仍然存放变量a的地址。
语句“p=&b;”只是对指针p进行了重新赋值,但并没有改变指针c的值。
故选择D
2. 下列程序的运行结果是()
char ss[]="0123456789";
printf("%d, %d\n",sizeof(ss), sizeof (*ss)):
A. 4 ,1 B 11, 1 C. 11, 4 D.4,4
解析:
答案是 B.
sizeof 函数返回的是参数类型占用的字节数, ss是字符串数组的首指针,*ss相当于ss[0],这个ss[0]的类型是char型,sizeof(*ss)相当于sizeof(char) 会给出char 类型占用的字节数为1。
通过sizeof可以得到ss数组占用多少字节,比如sizeof(ss);会得到整个ss数组占用了11个字符位置。
3. 当x=9999时,如下函数的输出结果为()
int func(x)
{ int countx=0;
while(x)
{
countx ++;
x=x&(x-1);
}
return countx;
}
A. 6 B. 7 C. 8 D. 9
解析:
该函数的作用是统计9999的二进制数值中有多少个1的函数,且有9999=9*1024+512+256+15
9*1024中含有1的个数为2,512中含有1的个数为1;256中含有1的个数为1,15中含有1的个数为4;故共有1的个数为8,结果为8
4. 内核不包括的子系统是()
A. 进程管理系统 B. 内存管理系统 C. I/O管理系统 D. 硬件管理系统
解析:
答案是D。 一般意义下,内核分为 进程管理系统、内存管理系统、I/O管理系统和文件管理系统 等四个子系统。
5. 以下关于C语言中typedef的叙述中错误的是()
A. 用typedef可以定义各种类型名,但不能用来定义变量
B. 用typedef 可以增加新的类型
C. 用typedef只是将已有的类型用新的标识符来代表
D. 使用typedef有利于程序的通用和移植
答案是:B
6. 有关构造函数说法不正确的是()
A. 构造函数与类名相同
B. 构造函数在声明类变量时自动执行
C. 构造函数无任何类型
D. 构造函数有且只有一个
答案: D
7. C语言非static的全局变量和非static的局部变量在内存中是否有区别? 如果有,是什么区别。
答: static局部变量只被初始化一次,下一次依据上一次结果值;static局部变量在程序结束时才被销毁,而普通局部变量在其作用域结束时就被销毁了。
8. int *(*ptr)(), 则以下叙述中正确的是()
A. ptr 是指向一维数组的指针变量
B. ptr 是指向int型数据的指针变量
C. ptr是指向函数的指针,该函数返回一个int型数据
D. ptr是指向函数的指针,该函数的返回值是指向int 型数据的指针
答案: 个人感觉应该是D,具体的分析如下
首先要理解C语言生命的优先级规则
A 声明从它的名字开始读取,然后按照优先级顺序依次读取。
B 优先级从高到低依次是
B.1 声明中被括号括起来的那部分
B.2 后缀操作符:
括号()表示这是一个函数,而方括号[]表示这是一个数组。。
B.3 前缀操作符: 星号*表示 “指向...的指针”。
C 如果const 和(或) volatile 关键字的后面紧跟类型说明符(如int, long等),那么它作用于类型说明符。在其他的情况下,const和volatile关键字作用于它左边紧邻的指针星号
比如如下的例子: char * const *(*next)();
这个声明表示 "next是一个指针,它指向一个函数,该函数返回另一个指针,该指针指向一个类型为char的常量指针"
9. 列举常见的进程间的通信方式?
答: 现在Linux使用的进程间通信方式包括如下
1. 管道(pipe)和有名管道(FIFO)
2. 信号(signal)
3. 消息队列
4. 共享内存
5. 信号量
6. 套接字(socket)
10. 不要使用库函数strcat();自行编程实现str_append()功能:已知两个字符串,将这两个字符串拼接起来作为返回值。例如该函数输入函数参数为"Hello"和"World",那么返回值就是"HelloWorld".