侧边栏壁纸
博主头像
lmg博主等级

  • 累计撰写 55 篇文章
  • 累计创建 6 个标签
  • 累计收到 2 条评论
标签搜索

CPP入门

lmg
lmg
2021-05-25 / 0 评论 / 0 点赞 / 703 阅读 / 2,430 字
温馨提示:
本文最后更新于 2022-04-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

数组的定义和初始化

静态 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 的字符数多一个。

char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};

依据数组初始化规则,您可以把上面的语句写成以下语句:

char site[] = "RUNOOB";

C++ 中的 String 类

#include <string>
string str = "runoob";

指针

&var 表示取var的地址

*var 访问指针中地址的值

#include <iostream>
 
using namespace std;
 
int main ()
{
   int  var = 20;   // 实际变量的声明
   int  *ip;        // 指针变量的声明
 
   ip = &var;       // 在指针变量中存储 var 的地址
 
   cout << "Value of var variable: ";
   cout << var << endl;
 
   // 输出在指针变量中存储的地址
   cout << "Address stored in ip variable: ";
   cout << ip << endl;
 
   // 访问指针中地址的值
   cout << "Value of *ip variable: ";
   cout << *ip << endl;
 
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip 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), 可读取类中的数据成员,但不能修改。

问题

int main(){
    int i=0;
    const int cp = i;
    cout<<cp<<endl;
    i=1;
    cout<<cp<<endl;
    return 0;
}
//输出 0 0     因为用i的值来初始化了常量cp,后续i的值改变对cp没有影响

int main(){
    int i=0;
    const int * cp = &i;
    cout<<*cp<<endl;
    i=1;
    cout<<*cp<<endl;
    return 0;
}
//输出 0 1     指针的话,cp指向i的地址,i的值改变会引起cp的值改变

int main(){
    int i=0;
    const int  &cp = i;
    cout<<cp<<endl;
    i=1;
    cout<<cp<<endl;
    return 0;
}
//输出 0 1    cp是i的别名

2.数组作为函数形参

void func1(const int is[10]){
    for(int i=0;i!=10;i++){
        cout<<is[i]<<endl;
    }
}
void func2(const int (&is)[10]){
    for(int i=0;i!=10;i++){
        cout<<is[i]<<endl;
    }
}

int main(){
    int a[] = {1,1,1,1,1,1,1,1,1,1,3};
    func1(a);//正确,
    func2(a);//错误,类型不匹配,只能接收长度为10的数组
    return 0;
}

3.返回

0

评论区