1、若已定义:int a[9],*p=a,并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是 _______。
A,p+1
B,a+1
C,a++
D,++p
答案:C
[评析] 数组名是指针常量,是个固定的指针,不能对数组名赋予一个新的地址值,也不能使这个指针常驻量“移动”,指向数组的其他元素。
2、设有如下定义:
unsigned long pulArray[] = {6,7,8,9,10};
unsigned long *pulPtr;
则下列程序段的输出结果是什么?
pulPtr = pulArray;
*(pulPtr + 2) += 2;
printf(“%d, %d
”, *pulPtr, *(pulPtr + 2));
答案:6,10
[评析]pulPtr = pulArray;//pulPtr指向pulArray[0]
*(pulPtr + 2) += 2;//pulPtr+2指向pulArray[2] = 8, *(pulPtr + 2) += 2表示pulArray[2]加上2,Array[2]=10
printf(“%d, %d ”du, *pulPtr, *(pulPtr + 2));//输出pulArray[0],pulArray[2]
//所以是输出6,10
3、下面程序段的运行结果是
char *s = "abcde",;
s += 2;
printf("%d",s);
A.cde
B.字符'c'
C.字符'c'的地址
D.无确定的输出结果
答案:C
[解析] 对于字符串指针,其保留的是整个串的首地址,即第一个字符的起始地址;当该指针做算术运算时,就是该指针根据其类型向后移动相应的存储空间。
4、在VC6,32位X86系统下,有下列程序
输出结果是:
a.3839 b.3938 c.380039 d.以上答案都不正确
答案:D
[解析] 如果int是4字节的话打印出来应该是0xcccc3839.看样子应该是VC平台。
共用体里里面定义的成员共用相同的存储空间,空间大小按照成员中最大的空间分配。
所以k和i[2]共用一块4字节内存,Win32下低字节在前,所以在内存顺序是
k0 k1 k2 k3,但这4个字节又与i[2]共用,即k0与i[0]共用,k1与i[1]共用,
所以i[0]=0x39,i[1]=0x38后同时给k0,k1赋值了。
由于VC调试态下默认将内存空间初始化为0xcc/0xcd,所以会k2=0xcc,k3=0xcc
打印出来k就是k3 k2 k1 k0 就是0xcccc3839了
5、以下关于静态成员变量的叙述不正确的是
A.静态成员变量为类的所有对象所公有
B.静态成员变量可以在类内任何位置上声明
C.静态成员变量的赋初值必须放在类外
D.定义静态成员变量时必须赋初值
答案:D
[解析] 静态成员变量的引入是为了解决同一类的不同对象间数据共享的需要。
因此,类的静态数据成员在定义时不能赋初值。只能在类外赋初值,此外要注意赋值时要用类名进行限制。
6、关于静态变量,下面说法“不正确”的有:
A) 静态变量在堆栈中分配
B) 静态变量的作用域一定是局部的,例如在一个文件内或一个函数内
C) 静态变量可分为静态局变量和静态全局部变量
D)静态变量存在于数据段中
答案:B
7、下面正确的有
A) 在中断中,不能同步获取信号量,但是可以释放信号量
B) 在中断中,可以使用系统调用 sleep 函数来等待一会儿
C)每一个进程有自己的独立地址空间,每一个线程程序也有自己的独立地址空间
D)CPU占用率为60%,意思是CPU有60%的时间在运行指令40%的时间没有运行指令
答案:B
8、设有如下定义:int (*ptr)(),则以下叙述中正确的是
B. ptr 是指向int 型数据的指针变量
C. ptr 是指向函数的指针 ;该函数返回一个int 型数据
D. ptr 是一个函数名 ;该函数的返回值是指向int 型数据的指针
答案:C。
[解析]ptr函数返回一个int 型数据 //这个才是正确的,理由是int fun();显然是一个函数说明,fun换为(*ptr),则ptr就是指向函数的指针了。
int (*ptr)[m] ptr是一个指向m长度的线性内存空间,即m大小的一维数组
int(*ptr)() ptr是一个返回值为int ,参数列表为空的函数指针类型。
例如,int *p,先根据优先级,等效于*(p),所以p本质上是一个有三个元素的数组;那么数组的每个元素是一个指针;那指针指向是指向一个int型的数据;所以整理一下就是p是一个有三个指向int数据的指针的数组,本质上就是一个数组。
扩展资料:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。
9、关于 TCP、UDP 及其上层的应用,描述错误的是:
A)TCP 协议面向连接的,UDP 协议是面向无连接的
B) UDP 不保证数据的可靠传送,而文件的传递时要求必须无错传送的,因而所有基于文件传递的应用都不能基于UDP,如:TFTP
C)telnet是基于TCP的终端应用,连续输入的多个字符可能会被封装到一个TCP包中
D)在同一个节点上,基于TCP和UDP的应用端口号可以重叠
答案:B
10、函数重载时,编译系统会根据(形参的个数或类型)来区分,与(返回类型)无关
11、栈和队列都是一种(特殊操作)的线性表,栈的插入和删除只能在(栈顶)进行。
12、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是()
[解析]定义:int (*p)(int a, int b);
p=max;
调用:int n=(*p)(a,b);
这是正确的使用方法,对此我最如下解释。
第一行定义一个指内向函数的指针
第二行把max函数的地址给指针p,即此时p的值是函数的首地址,
第三行对函数进行调用,(*p)表示对p的内容所指向的那个地址进行取值,即运行函数
13、int *p=malloc(100); 求 sizeof(p)
答案:sizeof(p) = 4;
[解析]
sizeof(p) 只能测定 指针大小,32位机上得4。
sizeof 不能测定动态分配的数组大小。
strlen 可用于测定动态分配的字符数组长度但不适合int.
_msize() 可用于测定动态分配的数组用去的内存,通常比数组单元要多一点。