在C语言中,用户标识符是用来命名变量、函数、类型等的符号。合法的用户标识符由字母、数字和下划线组成,并且不能以数字开头。根据题目中的选项,可以得知A)j2_KEY,B)Double和D)_8_都是合法的用户标识符,而C)4d是非法的,因为它以数字开头。
第二题涉及指针和函数指针的概念。`int *(*ptr)()`声明了一个指针变量ptr,它指向一个返回int型数据的函数。因此,正确的解释是C)ptr是一个指向函数的指针,该函数返回一个int型数据。
第三题考察数组和指针的运算。给定的代码段中,p是一个指向unsigned long类型数组的指针,初始值指向数组的第一个元素6。`*(p+2)`表示访问数组的第三个元素,即9。将2加到`*(p+2)`后,它的值变为11。然后,`*p`仍然指向数组的第一个元素6。所以输出应该是6,10,对应答案D)6,10。
第四题,fun函数接受一个int类型的指针并返回指针所指向的值,因此它返回的是一个整数,答案是B)一个整数。
第五题涉及数值的表示。题目中,真值为-0.1010的数在计算机中表示为1.0110,这意味着它使用的是正数的补码形式,因为最高位是1,表示负数。所以答案是B)补码。
第六题,堆栈指针SP通常存储的是栈顶单元的地址,因此答案是A)栈顶单元地址。
第七题,中断是由硬件触发的,通常是随机的,不受程序控制。所以答案是B)随机的。
第八题,虚拟存储系统的逻辑地址空间主要受限于计算机的编址范围,因为逻辑地址必须映射到物理地址,这受到CPU地址总线宽度的限制。答案是C)计算机编址范围。
第九题,分页式存储管理中,每个进程有自己的页表,但并非所有页表都必须驻留在内存中,只有当前使用的页才需要。所以答案是B)每个进程拥有一张页表,但只要执行进程的页表驻留在内存中,其他进程的页表不必驻留在内存中。
填空题部分:
1. 结构体变量加上偏移量后,p+0x1会指向下一个结构体成员,而对于(char *)p+0x1,由于指针转换为char类型,它会指向下一个字节。
2. 判断a, b, c是否能构成三角形的条件是a+b>c, a+c>b, b+c>a。在if语句中,应填写这些条件。
3. 这个程序中,全局变量gVal在ValInit函数中被赋值,但由于函数的作用域,这个赋值不会影响到主函数中的gVal。因此,打印结果是0。
4. 这个递归函数fun计算数组的最小元素。当n等于1时,返回数组的第一个元素;否则,递归调用fun并返回较小的元素。对于给定的数组,函数返回最小值2。
5. fun函数返回从str开始,以c中字符开头的子串的地址。如果找不到这样的子串,返回空字符串的地址。
请根据以上分析填充空白处的内容。