1.const
(1)区别方法,沿着*
号划一条线:
如果const位于*
的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;(常量指针)
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。(指针常量)
(1)指针所指向的内容是常量不可变
const int *p = &a;//常量指针
*p不可修改 *p = 8;(ERROR)
(2)指针本身是常量不可变
int * const p = &a //指针常量,
*p可以修改*p = 8;(OK)p不可以修改 p++(ERROR)p=&b(错误)
//指针 int * const a=&b; 这样才对。这种指针不能指向别的地址了,
//但它指向的变量b的值是可另外赋值的
(3)两者都不可变
const char* const pContent;
(4)const int *p和int const*p等价
const char *ptr;语句的含义是(定义指向字符串常量的指针 )
设int x;,则经过( C )后,语句*px=0;可将x值置为0。
A int * px;
B int const * px=&x;
C int * const px=&x;改常量的值,需要指针常量,离常量近。
D const int * px=&x;
已知:const char *p=”abc”;,则下列语句合法的是(D )
A. p[2]=’k’; B. *p[2]=’k’; C. *p=”xyz”; D. p=”xyz”;
解释:”abc”这个字符串所在空间被定义成只读,所以不能通过p来改变这段空间内容.但p不是只读,所p可以指向另一个字符串空间.
//习题
//ACBDB
//
1.设x和y均为bool量,则x&&y为真的条件是()。
A它们均为真
B其中一个为真
C它们均为假
D其中一个为假
2.以下程序中,new语句干了什么。( )
int** num;
num = new int* [20];
A 分配了长度为20的整数数组空间,并将首元素的指针返回。
C 分配了长度为20的整数指针数组空间,并将num[0]的指针返回。
3.关于delete的描述中,正确的是( )
A. delete是函数 //运算符
B. 它必须用于new返回的指针
C. 对一个指针可以连续使用多次delete
D. delete[]只能删除一维的动态数组//二维的
4.C++对C作了很多改进,从面向过程成为面向对象的主要原因是( )
A. 增加了一些新的运算符
B. 允许函数重载,并允许设置参数默认值
C. 规定函数必须用原形
D. 引进了类和对象的概念
5.关于C和C++的描述中,正确的是( )
A. C是面向过程,C++是纯面向对象
c++是面向对象的语言,但是并不是完全是面向对象的语言C++
支持面向过程、基于对象、和面向对象三种模式
B. C++是C的超集
C. C++是对C的错误的修改
D. C++和C没有关系
1.将高级语言编写的源程序翻译成目标程序的是( B )
A. 解释程序 B. 编译程序 C. 汇编程序 D. 调试程序
C语言属于高级语言,是一种面向过程的语言。BCPL、汇编语言、ALGOL68
程序设计语言的发展经历了机器语言、汇编语言到高级语言的历程。
其中机器语言和汇编语言都属于低级语言
2.在C++语言中,自定义的标识符( )
D. 不能使用关键字并且区分大小写
3.关于字符'\0'的下列描述中不正确的是(C )
A. 常用来作为字符串的结束标 B. 在计算机中存储时占一个字节的内存
C. 是空格字符的转义表示形式 D. 作为逻辑值使用时等价于逻辑“假”
4.sizeof(double)是一个( A)
A. 整型表达式 B. 双精度表达式 C. 函数调用 D. 不合法
5.下列说法正确的是( D)
A. 隐含类型转换可以从高类型转换为低类型
B. 显式类型转换不可以从低类型转换为高类型
C. 隐含类型转换可以在任何类型之间转换
D. 显式类型转换可以在任何类型之间转换
6. C++语言中用自定义类型定义变量时,(B)
A. 不能使用类型关键字 B. 可以不用类型关键字
C. 必须进行进行初始化 D. 不能进行初始化
- C++编译器进行编译的过程可详细地分为三个子过程,它们分别是
( 预处理过程)、编译过程和连接过程。
8.枚举变量的取值范围局限于定义该枚举变量的枚举类型的(枚举标识符)
9.若有定义:int a[5],*p=a;,则不合法的表达式是(B )
A. p=p+1 B. a=a+1 C. p-a D. a+2
10.关于函数的说法中,错误的是(B )
A. 函数名代表函数的入口地址
B. 函数指针就是返回指针值的函数
指针函数是指带指针的函数,即本质是一个函数int *f(x,y);
//f距离函数近,是指针函数,本质是函数
函数指针是指向函数的指针变量,即本质是一个指针变量。int (*f) (int x);
// 声明一个函数指针
C.函数指针可以作为另一个函数的参数
.D. 在32位系统中,函数指针变量的存储空间是4个字节
1.在C++程序中,对象之间的相互通信可以通过:B
A.继承实现 B.调用成员函数实现
C.封装实现 D.函数重载实现
~程序由对象自身或之间产生的消息传递来完成相应的功能,这里的消息传递实际上就是调用成员函数。
~在C++中(类即)是封装的实现。进一步的封装是通过类的存取权限实现的
~封装不是绝对的,是有可公开、可私有、可保护的分类封装,对于可公开的Method即是消息传递的成员函数
~逻辑运算符两侧运算对象的数据类型 可以是任何类型的数据
~数组的大小是固定的,所有数组元素的类型必须相同
~ 操纵符的作用域直到(下一次改变 )为止,(其中setw除外)。
~名字空间的作用?有点类似于类,不同的命名空间下可以有相同名字的变量或函数
~引用调用的调用方式是指(形参是引用,实参是变量 )
~ 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择(内联函数)函数体不能含有循环语句 函数体不能含有递归语句
~采用重载函数的目的在于使用方便,提高可读性
2.1.fun(a+b, 3, max(n-1, b));其中实参的个数是( 3 )
逗号把实参分割开来 你看到的a+b,max(n-1,b)都是计算出来的值作为实参
3.关于引用的叙述中,不正确的是(c )
A. 每一个引用都是其所引用对象的别名,因此必须初始化
B. 形式上针对引用的操作实际上作用于它所引用的对象
C. 一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行
D. 不需要单独为引用分配存储空间
4.若有定义:int *p=new int;,则下列说法中不正确的是(d)
int *p = new int[size]; // 申请一个长度为size的整型数组
A. 声明了一个指向整型变量的指针p
B. 可以用*p来表示所指向的整型变量
C. 通过运算符new,分配了一个整型数据的空间,并将其起始地址赋给指针p
D. 系统为指针变量p分配了一个整型数据的存储空间
5下列关于函数参数的描述中错误的C
A. 函数的形参在定义时不占用内存的存储单元
B. 在函数的传值调用中将用实参来初始化形参
C. 在函数的传址调用中形参需要分配存储空间
D.在函数的传引用调用中形参是实参的别名
6.下列关于内联函数的说法中不正确的是(D )
A. 内联函数体内不能有循环语句
B. 内联函数体内不能有switch语句
C. 内联函数必须先定义后调用
D. 内联函数在被调用时发生控制转移
- 关于递归函数的说法中,不正确的是(C )
A. 递归函数可以改写为非递归函数
B. 递归函数应有递归结束的条件
C. 解决同一个问题的递归函数的效率比非递归函数的效率要高
D. 递归函数往往更符合人们的思路,程序更容易理解
8.下列关于函数的描述中错误的是(D )
A. 函数形参的作用域是该函数的函数体
B. 所有的函数在定义它的程序中都是可见的
C. 调用系统函数时,要先将该系统函数的原型说明所在的头文件包含进去
D. 系统函数及其库不是C++语言所必须的
- 关于指针运算的说法中,不正确的是( D)
A. 两个指针在一定条件下可以进行相等或不等的运算
B. 可以用空指针赋值给指针变量
C. 一个指针可以加上两个整数之差
D. 两个指针在一定条件下可以相加
10.在函数说明中,不必要的是(d )
A. 函数的类型
B. 函数参数的类型
C. 函数的名字
D. 函数参数的名字
~若函数没有返回值,则该函数的类型应被说明为(void )
~若定义函数时没有指定返回类型,则系统认为该函数的返回类型是 ( int ) 类型。
~内联函数的展开、重载函数的确定均在 ( 编译 ) 阶段进行。
~函数名相同,但对应形参表不同的一组函数称为(重载函数 ) ,参数表不同是指 类型 不同或 参数个数 不同。(顺序)
~C++中,关于默认形参值,正确的描述是应该先从右边的形参开始向左边依次设置
有以下说明语句,则调用函数的正确语句是(B )。
int b[4][5];
void fun( int * ,int n);
(A)fun(b, 20);
(B)fun(b[0], 20);
(C)fun(b[0][0], 20);
(D)fun(&b, 20);
对函数原型为int& min(int& a, int& b);的函数,下列语句块哪个是错误的:C
A. int x=10,y=5;min(x,y)=100;返回的是引用,引用可以作左值,
B.int x=10,y=5, z; z=min(x,y+=x);
C. int x=10,y=5; min(x,10)=y; 引用必须是变量的别名
D. int x=10,y=5; x=min(x,y):
关于函数模板的叙述中,正确的是( AD)
A. 函数模板实际上是函数类型和形参类型不具体指定的通用函数
B. 函数模板可以用于描述函数体不同的一系列函数
C. 函数模板可以用于描述参数个数不同的一系列函数
D. 函数模板定义中typename和class的作用相同
关于函数模板的说法中,正确的是(A )
A. 函数模板中typename和class用于定义不同的虚拟类型名
B. 能被函数模板代替的函数必须具有相同个数的形参
C.函数模板的虚拟类型名(即指的函数模板的类型参数)由C++系统自动确定
D. 函数模板的虚拟类型名是在运行阶段确定实际类型的