c++下学期第一次笔记

一·常量表达式和constexpr与const
常量表达式:值不会改变并且在编译过程中就能计算出结果的表达式。
constexpr必须用常量表达式初始化,也就是说必须在编译过程就能计算出结果(若要用函数作为constexpr的初始值那么该函数应该是conste类型的函数)。
const 不要求在编译过程中就能计算出结果 (强调运行时不可改变) 大多数情况下并没有区别。
指向const对象的指针 const type 指针
const int a=1; //const地址无法赋给非const指针所以应该定义一个指向const的指针
const int * b=&a; //指向常量的指针,而非常指针。
const int c=2; b=&c; //指向对象可以改变,指向对象内容不能改变。
int d=10; b=&d; //也可以将一个非const地址赋给 指向const的指针 但是不能通过该指针改变该变量的内容。
*b=15;//错误
指向非const对象地const指针(常指针 ) type const 指针
int num =10; int * const poi =#// type const 指针 指针的值初始化后不能改变指向固定的单元(只能指一次) *
poi=99;//const限定的是poi的值;可以对指向内容修改,但不可以对指针指向对象修改。 int member=10;
poi=&member;//错误
指向const对象的const指针

/*const type const 指针(第一个const限定int表示指针指向的单元是常量, 第二个const限定‘指针’表示指针的值也是常量,因此该指针所在的内存值不允许改变它所指向内存的值也不能改变)

二丶指针和引用
通过指针或引用间接访问变量的内容。
指针可以持有对象的地址,引用是变量的别名。
1.指针
int ival=10;
int *pa=&ival;
指针类型一定要与指向的变量类型相同
空指针,不指向任何对象的指针
int *p1 = nullptr;
int p2 = 0;
//#include
int p3 = NULL;
2.引用
左值引用
类型 &引用变量=初值;
int ival = 10;
int &refval = ival;
引用不是一个对象,它是已存在变量的别名,所以不能与字面值或表达式结果绑定。
右值引用
类型 &&右值引用变量 = 右值表达式;
int i=10;
int &&r = i
5;
3.new和delete
动态对象空间分配和释放
c语言中分配malloc() 释放free()
c++中 分配new() 释放delete()
(1.new
int
ip1 = new int;
*ip1 = 512;
或int ip2 = new int(100);
或int * ipa = new int [100];
delete
(2.delete 指针;
int
ip1 = new int;
*ip1 = 512;
delete ip1;
或 delete [ ] 指针;
int * ipa = new int [100];
delete [ ] ipa;
堆上的空间在使用后必须释放否则会造成内存泄漏。
执行delete运算后指针指向的空间被释放归还给自由空间不能再使用指针所指向的内容,但是指针自己的储存空间还是存在的。该指针被称为空悬指针指向不确定的单元如果在继续使用该指针间接使用这个单元就是非法的对自由空间造成损害进而引起不可预料的错误。
三.文件的输入输出

文件的读写
如果想以输入方式打开,就用ifstream来定义;
如果想以输出方式打开,就用ofstream来定义;
如果想以输入/输出方式来打开,就用fstream来定义
ofstream demo(“demotest.txt”); 可以分成两步 demo<<“demoout”;
demo.close(); //完成操作后要关闭文件
ifstream demo(“test.txt”); char dchar; demo>>dchar;//从文件中读取一个字符
char dworld[80];
demo>>dworld;//从文件中读取一个单词 demo.getline(dworld,80);//从文件中读取一行 string line; getline(demo,line);//读取一行转换成字符串 fin.close();
字符串流stringstream是 C++ 提供的一个字符串流(stream),和iostream、fstream有类似的操作方式
istringstream 从string中读取数据 定义 istringstream is(strs);
ostringstream 向string对象写入格式化的内容。
stringstream 即可以读取也可以写入。
stringstream ss; ss << "hello ";
ss << “world!”; // 对stringstream而operator<< 是一直往字符串流中写字符,而不是覆盖之前输入的字符
cout << ss.str() <<endl; /*str()函数创建的是一个临时的string对象
四丶函数
函数定义
注意 形参前加类型而实参前不加变量类型。
函数传参有三种传参方式:传值、传址、传引用

①按值传递
ⅰ形参和实参各占一个独立的存储空间。
ⅱ形参的存储空间是函数被调用时才分配的,调用开始,系统为形参开辟一个临时的存储区,然后将各实参传递给形参,这是形参就得到了实参的值。
②地址传递
地址传递与值传递的不同在于,它把实参的存储地址传送给形参,使得形参指针和实参指针指向同一块地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。
③引用传递
引用传递是以引用为参数,则既可以使得对形参的任何操作都能改变相应数据,又使函数调用方便。引用传递是在形参调用前加入引用运算符“&”。引用为实参的别名,和实参是同一个变量,则他们的值也相同,该引用改变则它的实参也改变。
五重载函数
如果同一个作用域内的几个函数名字相同但形参列表不同,则他们是重载函数
形参列表不同的概念:
1.形参数量不同
2.形参类型不同
3.常指针与指针不同,常引用与引用不同。
调用函数时如果存在多个重载函数,编译器将根据函数调用中指定的实参进行选择。
存储类别 static静态存储
static对象在控制流程第一次到达其定义点时被初始化,如果没有提供初始值就被自动初始化为0;
在函数的后续调用中,初始化语句被跳过
静态对象的值在函数被多次调用之间保持有效,生存期会延续到整个程序结束但他的作用于仍然是局部的,因此需要在同一函数的两次调用之间保留某些数据时可以使用局部static对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值