C++程序中{{c1::}}要有main函数 一定 不一定
一个函数定义包含哪几个部分 返回类型 函数名(形参列表) { 函数体 }
main函数返回值为0时,表示{{c1::}} 成功 失败
无论你使用命令行页面或者IDE,大多数编译器都要求程序源码存储在一个或者多个文件中。 这个程序文件通常被称为: 源文件
命令行界面中,语句 $ CC prog1.cc 中的CC表示什么 编译器程序的名字
命令行界面中,语句 $ CC prog1.cc 中的$是什么 命令提示符
Unix系统编译器中可执行文件后缀为 .out
标准库的4个IO对象 cin 标准输入 cout 标准输出 cerr 标准错误 clog
clog的作用 IO标准库 用来暑促纯刚需运行时的一般性信息
cerr的作用 IO标准库 用来输出警告和错误消息
C++中两种注释的写法 //双斜线单行注释 /* * *多行注释 */
“#include < > 和 #include”" “” 的区别是什么" “#include < > 里面放的是来自标准库的头文件 #include”" “” 里面放的是不属于标准库的头文件"
成员函数的概念 被一个类所包含的函数
“方法”是什么 成员函数
024表示多少进制 8进制
16进制数开头用什么表示 0x或0X
字面值常量是什么 “在C/C++中,4、3.1415926、0x24、”“BEIJING”“等等,都称为字面值常量。 称之为字面值是因为只能用它的值来称呼它, 称为为常量是因为它的值不能被修改。”
十进制字面值{{c1::}}会为负数 不可能 可能
字符串与数组的关系 字符串实际上是由常量字符组成的数组
字符串字面值的实际长度 与 内容上的长度 的关系 实际长度要比内容多1,因为每个字符串末尾都被添加了一个空字符’\0’
“”“A”“表示{{c1::字符串}}(字符/字符串),'A’表示{{c1::字符}}(字符/字符串)”
“字符串”“A”“与字符’A’长度上的区别” “字符串”“A”“由两个字符组成,一个是’A’另一个是空字符。 而字符’A’仅有一个字符组成。”
输出时,分多行书写的字符串字面值,该怎么写 “std::cout << ““a really, really long string literal “” ““that spans two lines”” << std::endl;”
literal(翻译) 字面值
转义序列: 换行符 \n 反斜线\ 单引号’ 这种在程序中在程序中被当成{{c1::}}字符 一个 两个
转义序列以{{c1::}}开头 \ / 如\n
换行符 的转义序列写法 \n 是一个转义序列,它表示什么
泛化的转义序列从写法上有哪两种形式 一种是以\x开头,后接16进制数 一种是以\开头,后接8进制数
简述泛化的转义序列输出为字符的逻辑 泛化的转移字符有两种类型, 一是以\x开头的,后面跟的数字为16进制数, 二是以\开头的,后面跟的数字为8进制数, 把对应进制的数进行计算后得到的ASII码编号对应的字符 即为输出的字符
泛化的转义序列后面跟的数字能有多少个 \只与后面数字中的前三个构成转义序列 \x与后面全部数字构成转移序列
Unicode字符集是什么 用于表示所有自然语言中字符的标准
“诸如 L’a’ u8"“hi!”” 42ULL 1E-3F 3.14159L 这样的表示什么意思” 通过添加前缀和后缀, 可以改变整型、 浮点型和字符型字面值的默认类型。 //宽宇符型字面值, 类型是wchar_t //utf-8字符串字面值(utf-8用8位编码一 个Unicode字符) //无符号整型字面值, 类型是unsigned long long //单精度浮点型宇面值, 类型是float //扩展精度浮点型字面值, 类型是long double
变量定义的基本形式是什么 “首先是类型说明符(type specitier), 随后紧跟由一个或多个变量名组成的列表, 其中变量名以逗号分隔, 最后以分号结束。 例如: int sum = 0, value, // sum、value和units_sold都是int units_sold = O; // sum和units_sold初值为0 Sales_item item; // item的类型是Sales_item (参见1.5.1节, 第17页) // string是一种库类型, 表示一个可变长的字符序列 std: :string book(”“0-201-78345-X””) ;//book通过一个string字面值初始化"
对象的含义 一块能存储数据并具有某种类型的内存空间
初始化的含义 对象在创建时获得了一个特定的值 的这个过程
在同一条定义语句(一个分号内)中, {{c1::}}用先定义的变量值去初始化后定义的其他变量。 可以 不可以
初始化是一种赋值操作{{c1::}} 错 对 初始化与赋值是两个完全不同的操作。
列表初始化的含义 形如int units_sold{0}; 使用花括号进行的初始化 这是C++11新标准
列表初始化如果初始值存在信息丢失的风险,则编译器{{c1::}}报错 会 不会
默认初始化的含义 如果定义变量没有指定初值,则变量被默认初始化。此时变量被赋予了默认值。
因为是可以被编译通过的,所以没有必要初始化每个内置类型的变量{{c1::}} 错 对 未初始化的变昼含有一个不确定的值,使用未初始化变量的值是一种错误的编程行 为并且很难调试。 尽管大多数编译器都能对一部分使用未初始化变量的行为提出警告, 但严格来说, 编译器并未被要求检查此类错误。 使用未初始化的变量将带来无法预计的后果。
分离式编译的含义 允许将程序分割为若干个文件,每个文件可被独立编译。
想申明而非定义一个变量,可以在变量名前添加哪一个关键字 extern
extern int i; //{{c1::申明}}(申明还是定义) int j; //{{c1::定义}}(申明还是定义) extern double pi = 3.1416; //{{c1::定义}}(申明还是定义)
在同一个程序中,定义的次数可以有{{c1::1(有且仅有)}}次,声明的次数可以有{{c1::0 - n}}次
标识符是什么 组成名字的字符序列
C++语言大多数作用域用什么符号分隔 花括号{ }
main函数的返回类型必须为int{{c1::}} 对 错 在C++ primer 1.1节中是这样的。
引用的基本写法 int a=1024; int b=&a; //b指向a,b是a的另一个名字
引用{{c1::}}需要初始化 一定 不一定
引用{{c1::}}一个对象 不是 是 它只是一个已经存在的对象的另外一个名字
{{c1::}}定义引用的引用 不能 能 因为引用本身不是一个对象
可以对某个字面值进行引用{{c1::}} 错 对 引用只能绑定在对象上,而不能与字面值绑定在一起。
double dval = 3.14; int &refValS = dval; 是否合法,原因为何 非法,引用的类型都要和与之绑定的对象严格匹配。 这里一个是int一个是double 指针也需要类型匹配。
指针{{c1::是}}(是/不是)一个对象, 引用{{c1::不是}}(是/不是)一个对象
指针和引用都不一定需要在定义时赋值{{c1::}} 错 对 指针不一定需要在定义时赋值,引用一定要在定义时赋值
引用和指针一样,可以通过语句让引用引用到一个新的对象上{{c1::}} 错 对 在指针的生命周期中可以先后指向几个不同的对象, 但是对于引用而言,它不是一个对象,与被引用的对象是绑定的关系, 因此不能重新引用到新的对象上去。
int *ip1, *ip2; double dp, dp2; 定义的这四个对象分别表示什么 ip1和ip2都是指向int型对象的指针 dp2是指向double型对象的指针,dp是double型对象
可以定义指向引用的指针{{c1::}} 错 对 因为指针不是对象,没有地址,所以不能定义指向引用的指针。
double dval; double pd = &dval; double pd2 = pd; 下划线部分只能填double{{c1::}} 对 错 dval是一个类型为double的对象, pd是初始值是 double型对象的地址 pd2是初始值是 指向double 对象的指针
指针的值可以有哪四种状态 1.指向一个对象。 2. 指向紧邻对象所占空间的下一个位置。 3. 空指针, 意味着指针没有指向任何对象。 (有效状态) 4. 无效指针, 也就是上述情况之外的其他值。 第2/3种有效,但是操作受限,因为没有指向具体对象,所以试图访问此类指针(假定的)对象的行为不被允许。
因为编译器不会报错,所以可以拷贝和访问无效指针。{{c1::}} 错 对 虽然编译器不会报错,但是会引发错误。
编译器{{c1::}}检查无效指针。 不会 会
操作符 叫什么 解引用符 怎么写
解引用符的作用 对指针指向的对象进行操作, 例如p是对指针p所指向的对象进行操作
nullptr是一个字面值{{c1::}} 对 错 nullptr是一个特殊类型的字面值,它可以被转换为其他任意指针类型。 这是C++11新引入的方法
直接使用语句int *p3 = NULL;程序会报错的原因是什么 缺少头文件# include cstdlib
生成空指针使用语句 int *p2 = 0;{{c1::}} 正确 错误
语句int *p3 = NULL中的NULL是一个预处理变量{{c1::}} 对 错
语句 int p2 = 0是错误的,因为无法把0赋给p2{{c1::}} 错 对 这里是初始化了指针p2,并对其置空指针。
int ival=0; int *pi=0;//{{c1::初始化指针pi,并对指针置空指针}} pi=&ival;//{{c2::将指针pi赋为ival的地址,现在pi指向了ival}} 两句话分别进行了什么操作
int ival=1; int *pi=0; pi=&ival; pi=0;//这一步中{{c1::}}的值被改变 ival pi
两个指针如果相等,可能有哪几种可能性 1、它们都为空、 2、都指向同一个对象 3、都指向了同一个对象的下一地址。 (三种合法的指针)
指针只要是有效的,那一定指向了一个对象{{c1::}} 错 对 指针有四种状态: 1、指向一个对象 2、指向紧邻对象所占空间的下一个位置 3、空指针 4、无效指针 其中前三种为有效状态,但是第2、3种情况指针是没有指向一个对象的。
指针可以指向紧邻对象所占空间的下一个位置,所以可以访问和操作此位置的对象{{c1::}} 错 对 虽然这是有效指针,但是使用受到限制,所以试图访问的行为不被允许。
对于合法指针{{c1::}}用相等操作符()来判断是否相等 可以 不可以
对于所有的指针,都能使用相等操作符()来判断是否相等{{c1::}} 错 对 非法指针不能
int ival = 1024; int pi = 0; //pi为空指针 int pi2 = &ival; //将指针pi2指向ival if (pi) //空指针 判断值为{{c1::false}}(true or false?) … if (pi2) //指向某个对象的指针 判断值为{{c1::true}}(true or false?{) …
指针和引用有哪些区别 1、指针本身就是一个对象 2、指针的生命周期中可以先后指向几个不同的对象 3、指针无须在定义时赋初值
复合类型的概念 基于其他类型定义的类型。 例如引用和指针
在语句 int p1,p2;中,p1和p2分别是什么 pl是指向int的指针 p2是int
对于语句 int p; 基本数据类型是{{c1::}} int int int是基本数据类型,只是用来修饰int的
int b;是{{c1::}}的写法 合法 非法
解引用的概念 解引用是关于指针的概念,对指针进行解引用操作会获得指针所指的对象。
** 和 ***表示什么 指针 指向指针的指针 指向指针的指针的指针
int ival = 1024; int *pi= &ival //pi指向一个int型的数 {{c1::int **ppi = π}} //ppi指向一个int型的指针
是否存在对指针的引用 和 对引用的指针 存在 对指针的引用 不存在 对引用的指针 因为指针是一个对象,而引用不是
int *p; //p是一个int型指针 {{c1::int *&r = p;}}//r是一个对指针p的引用
int i = 42; int *p; //p是一个int型指针 int *&r = p; //r是一个对指针p的引用 r = &i; 问对象p里存放的是什么 最后一句r引用了一个指针,因此给r赋值&i就是令p指向i 存放的是i的地址
int i = 42; int *p; //p是一个int型指针 int *&r = p; //r是一个对指针p的引用 r = &i; //r引用了一个指针,因此给r赋值&i就是令p指向i *r=0; 最后一步哪个对象的值被改变了{{c1::}} i p r 解引用r得到i,也就是 p指向的对象,将i的值改为0 上面选项中r连对象都不是。
const int bufSize=512; bufSize=1024; 程序报错的原因是什么 加关键词const的变量成为一个常量,是不能被修改的, 任何对其的赋值行为都会报错。
const对象可以被默认初始化{{c1::}} 错 对 const对象一开始就必须分配一个值进行初始化。
对const对象的初始化是否正确{{c1::}} int i = 42; const int ci = i; 正确 错误 const类型的对象主要限制在于不能改变其内容。
const对象的作用范围是什么 整个文件内 注意不是整个程序内
对于const对象,编译器会进行什么操作 将在编译过程中把用到该变量的地方都替换成对应的值。 例如对于语句 const int bufSize = 512; 编译器会找到代码中所有用到 bufSize的地方,然后用512替换。
可以在多个文件里设置同名的const对象吗{{c1::}} 可以 不可以 每个文件的const对象仅对本文件有效
如何通过一个语句让const变量在同一个程序的多个文件中同时使用 对const变量不管是声明还是定义都添加extern关键字
因为在.cc文件中进行了对const对象的定义 extern const int bufSize =fen(); 这里使用了extern关键字,因此不需要在其他的文件,诸如.h文件中添加声明{{c1::}} 错 对 需要在其他的文件,诸如.h文件中添加申明 extern const int bufSize;