111-120

注:以下问题的部分解析并非全部是自己原创,只是为了便于以后复习,直接粘贴总结的答案,主要来源是七月在线中的解析部分。https://www.julyedu.com/question/selectAnalyze/kp_id/4/cate/C

1、假定x=65530,下面函数的返回值是多少( )

int func(x)
{
int count_x =0;
while(x)
{
count_x ++;
x = x&(x-1);
}
return count_x;
}
A 100
B 14
C 20
D 16

解释:选B

同71题。

2、 不能把字符串”HELLO!”赋给数b的语句是( )

A char b[10] = {‘H’, ‘E’, ‘L’, ‘L’, ‘O’, ‘!’, ‘\O’};
B char b[10]; b = “HELLO!” ;
C char b[10]; strcpy(b, “HELLO!” );
D char b[10] = “HELLO!” ;

解释:选B

b是一个地址。

3、在C++中,{const int i=0; int *j = (int *) &i; *j=1;printf( “%d,%d” ,i, *j)},输出是多少( )

A 0,1
B 1,1
C 1,0
D 0,0

解释:选A

i为常量类型,不会被修改。
(int *) &i; 将&i转换为(int *)类型。

4、下面哪一个是sort的template的正确写法( )

A void sort(class A first, class A last, class B pred)
B void template sort(A first, A last, B pred)
C template void sort(A first, A last, B pred)

解释:选C

选项A,连template关键字都没有,不是模版函数的写法。
选项B,定义模版函数时,函数的返回值类型不能出现在template关键字之前。
选项C,sort的前两个参数是待比较元素,类型保持一致,第三个参数用来指定比较方法,与前两个参数的类型没有直接关系,类型不用相同,是模版函数的正确写法。

5、下面代码会输出什么( )

int main (int argc, char **argv)
{
int a[4] = {1,2,3,4};
int * ptr = (int * ) (&a+1);
printf( “%d” ,*(ptr-1));
}
A 1
B 2
C 3
D 4

解释:选D

a表示数组,则&a表示指向数组的指针(即数组指针),其类型为int(* )[4],所以&a+1并不是首地址+1,而是加上一个a数组的偏移,即偏移了a数组的大小(4* sizeof(int)),那么ptr实际是&(a[4]),也就是a+4。而ptr为int * 类型,所以ptr-1只会减去一个int的偏(1*sizeof(int)),所以最终ptr为a+3,故答案选D。

int main ()
{
    int a[4] = {1,2,3,4};
	cout << a << endl;
	cout << (&a) <<endl;
	cout << a+1 << endl;
	cout << (&a+1) <<endl;
    int *ptr1 = (int*) (a+1);
    int *ptr2 = (int*) (&a+1);
	
	cout << *(ptr1-1) << endl;
	cout << *(ptr2-1) << endl;
	system("pause");
	return 0;
}
运行结果:

在这里插入图片描述

6、已知同一个目录下的两个源文件File1.c和File2.c,内容如下:

File1.c:
char str[] = “abcdefg”

File2.c:
extern char * str;
int main (int argc, char* argv[])
{
str[0] = ‘A’;
return 0;
}
以下说法正确的是( )
A 执行语句str[0] = ‘A’后str[]的内容为 “Abcdefg”
B extern char *str;编译错误
C str[0] = ‘A’编译错误
D str[0] = ‘A’运行时出错

解释:选D

File2中 extern char *str;声明了一个指针变量,而str在File1中定义为字符数组。由于指针和数组并不完全等价,指针指向某地址,会被解引用,因此与实际的定义不同,从而造成运行时非法访问。正确的方法应该将File2的声明改为extern char str[]。

文件一中:
char *a = "abc";
char b[] = "abc";
char *a1 = "abc";
char b1[] = "abc";

文件二中:
#include<iostream>
using namespace std;

extern char a[];  // 认为变量a是char数组类型 a中本来存储的是地址,却看成字符数组输出
extern char b[];

extern char *a1;
extern char *b1;   //认为变量b1是char*类型  b1中本来是字符数组,却看作地址去访问
int main ()
{
   cout << a << endl;
   cout << b <<endl;
   cout << a1 << endl;
   cout << b1 <<endl;
   system("pause");
   return 0;
}

在这里插入图片描述
注意:声明和定义必须以相同的方式出现。

7、 在C语言中,全局变量的存储类别是( )

A static
B extern
C void
D tegiste

解释:选B

在C语言中,全局变量是在函数的外部定义的变量,因此也叫做外部变量。全局变量不属于某个特定的函数,它属于一个源程序文件,因此全局变量的作用域是整个源程序。全局变量的说明符为extern,因此选项B正确。

8、设int类型的数据长度为2个字节,则unsigned int类型数据的取值范围( )

A 0~65535
B -32768~32767
C -256~255
D 0~255

解释:选A

有符号数的存储单元中二进制位中最高位代表符号(0表示正,1表示负)。无符号数的存储单元中全部二进制位用于存放数。2个字节共占16位,可以表示2^16个数,所以unsigned int 类型数据的取值范围就是0-2 ^16-1,即0-65535。

9、C语言中,凡未指定存储类别的局部变量的隐含存储类别是( )

A auto
B static
C extern
D register

解释:选A

在C语言中,函数中的局部变量如果没有声明为static存储类别,那么它们都是被动态的分配存储空间,它们存储在存储空间的动态存储区。这类变量也叫做自动变量,使用关键字auto声明,但是默认auto是可以省略的。因此,凡未指定存储类别的局部变量的隐含存储类别是auto,选项A正确。

10、以下对枚举类型名的定义中正确的是( )

A enum a={one,two,three}
B enum a{one=9,two=-1 , three}
C enum a={ “one” , “two”," three" }
D enum a{ “one” , " two" ," three" }

解释:选B

在C语言中,声明枚举类型使用enum关键字。例如 enum DAY { MON=1, TUE}; 定义了枚举类型enum DAY。枚举类型是一个集合,其枚举成员是一些命名的整型常量,并且元素之间用逗号隔开,最后以分号结尾。可以设置第一个枚举成员的值,如果不设置的话,默认值为0。并且后续成员的值依次为前一个成员的值加1。枚举类型的定义中不能包含 = 关键字,因此选项A和选项C错误。每个枚举成员对应着一个整型常量,但是枚举成员不能是字符串类型,因此选项D错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值