数组的定义和初始化
静态 int array[100]; //定义了数组,但是未进行初始化
静态 int array[100]={1,2}; //定义并初始化了数组,除前两个其余为默认值0
动态 int* array = new int[100]; 分配了长度为100的数组
动态 int* array = new int[100](1,2); 为长度为100的数组array初始化前两个元素
字符串
C风格字符串
C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。
下面的声明和初始化创建了一个 RUNOOB 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 RUNOOB 的字符数多一个。
1 | char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'}; |
依据数组初始化规则,您可以把上面的语句写成以下语句:
1 | char site[] = "RUNOOB"; |
C++ 中的 String 类
1 |
|
指针
&var 表示取var的地址
*var 访问指针中地址的值
1 |
|
当上面的代码被编译和执行时,它会产生下列结果:
1 | Value of var variable: 20 |
指针和引用
引用:为对象起了另外一个名字。必须初始化。引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起。引用不是对象,没有实际地址,所以不能定义指向引用的指针。
指针:与引用一样,可以实现对其他对象的间接访问。不同点:a.指针本身是一个对象,允许对指针赋值和拷贝,指针在其生命周期内可以先后指向不同的对象。b.指针无须再定义时赋初值。
Const
顶层const:表示指针本身是一个常量,更一般的,顶层const可以表示任意的对象是常量(不限于指针)
底层const:表示指针所指对象是一个常量(限指针和引用等复合类型)
int *const p1 = &i; //从右往左看,p是一个常量,指向一个整型,可称为常量指针,是一个顶层const
const int p2 = &ci; //从右往左看,p2是一个指针,指向一个const int也即常量,可称为指针常量(同int const p2)是一个低层const
const int ci = 42; //顶层const
const成员函数(P231)
默认情况下,this的类型非常量的常量指针,如:Sales_data * const this
但是,我们不能将this绑定到一个常量对象上:
即 this = &常量对象 是不行的,因为常量对象的值不能够更改,而this指向对象的值是可修改的,这样会出大问题。
因此,要在一个常量对象上调用普通的成员函数是不行的,我们使用常量成员函数。func(…) const{。。。}类型,const用来表明this的类型是const Sales_data * const this this是一个指向常量对象的常量指针,所指对象的值及this本身的值(地址)都不能修改。
总结:常量成员函数 (const member function), 可读取类中的数据成员,但不能修改。
问题
1.
1 | int main(){ |
2.数组作为函数形参
1 | void func1(const int is[10]){ |
3.返回