C++课堂笔记(第二讲)

C++对C的加强:

for语句

1.声明定义
c中:

int i

for (i = 0; i < 100; i++)
{

}

c++中:

for (int i = 0; i < 100; i++)
{

}

好处:节省变量的空间

2.foreach用法(遍历)

	int array[5] = { 1,2,3,4,5 };

	for(int temp : array)
	{
		cout << temp << endl;
	}

输出为
1
2
3
4
5

register关键字:提高程序运行效率:省去CPU从内存抓取数据的开销

语法作用:将变量尽可能得保存在CPU内部寄存器中

使用注意事项
1 只能修饰局部变量,不能修饰全局变量和函数
2 不可以用&操作符取地址(有可能该变量保存在CPU内部寄存器中)
3 register修饰的变量,一定是CPU所接受的数据类型。(有的CPU不支持浮点型运算)

什么时候用register修饰一个变量?(频繁访问的变量)

volatile:防止编译器优化(将变量优化到寄存器中(寄存器中存在边际效应))
volatile的使用场景:访问硬件时,所使用的全局变量;

C++中的优化内容:当对register变量取地址时,会将该变量重新保存到内存中;

auto关键字
C语言中:基本无用(被淘汰)
C++中:auto :类型推导

int num = 5;
char *ptr = "hello world";
auto num1 = 5;
auto ptr1 = "hello world";

typedef关键字
语法作用:给类型重命名
例如:
1 、给函数指针重命名:

typedef int (*)(int,int) P_FUNC

typedef int (*P_FUNC)(int,int);

2 、给int重命名:

typedef int Int;

工程应用:1.提高可读性 2.提高移植性
存在问题:重命名函数指针时,可读性差
C++中的替代产品:using

int add(int a,int b)
{
	return a+b;
}

using P_FUNC = int (*)(int,int);

P_FUNC p_add = add;
using namespace std;
using Int = int;

const关键字
作用:将一个变量变为只读变量

const int num =5
int *p = &num;
*p = 7;
printf("num = &d\n",num);

打印结果为7,说明const修饰的是变量名,并不是用来修饰内存空间的。虽然不能通过变量名(此处为num)来修改变量空间,但变量空间还是可变的。

工程引用的作用:修饰函数形参,保存实参在函数执行过程中不能被改变。

define:纯文本替换(傻瓜式替换)

C++中的升级: const 修饰的变量是真正的常量

什么时候传地址,什么时候传值?
1、当修饰实参变量值时,传实参变量值的地址;(传实参变量的地址,即可以使用也可以修改实参变量的值)。
2、当只是用不修改实参变量值时,传实参变量名; (传实参变量名,只能使用实参变量名的值,不能修改)。

引用:解决函数指针传参和返回值问题

语法作用:引用就是给变量起别名,操作引用相当于在操作引用所绑定的变量

int count = 5 ;
int &r_count = count;
r_count ++;
cout<<count<<endl;

输出结果为6

注意事项: 定义引用必须绑定变量;一旦绑定一个变量就不能绑定其他变量

左值引用右值引用

左值:可以被修改的值(可以取地址的)
右值:不可以被修改的值(不可以取地址的)

左值引用:只能绑定左值 int &
右值引用:只能绑定右值 int &&(对象移动)

std::move()函数 :把左值变成右值

引用与指针的区别
1 本质:指针是变量,引用是别名
2 内存分配:指针占用内存空间,引用实际上也占用内存空间
3 级数:指针有多级指针,引用有左值引用和右值引用
4 使用效率:指针不安全,容易造成内容泄露;引用不会

ptr :一维数组首元素的地址;
&ptr :一维数组的地址;
*(&ptr)=ptr;对一维数组的地址取值等于一维数组首元素的地址;

ktr :二维数组的首个一维数组的地址;
&ktr :二维数组的地址;
*ktr:二维数组的首个一维数组的首元素的地址;
**ktr:维数组的首个一维数组的首元素的值;
*(&ktr)=ktr:对二维数组取值等于二维数组中首个一维数组的地址;

str:三维数组中首个二维数组的地址;
&str:三维数组的地址;
*str:三维数组的首个二维数组的首个一维数组的地址;
**str:三维数组的首个二维数组的首个一维数组的首元素的地址;
***str:三维数组的首个二维数组的首个一维数组的首元素的值;

指针数组实际上还是一个一维数组,只不过里面保存的是指针;

wtr:首个元素的地址;

malloc和free(函数)

char *ptr =(char *)malloc(sizeof(char) * 100);//指针赋值一定是相同类型;
if(ptr ==NULL)
{
	perror("malloc error!");
	exit(1);
}
memset (ptr,0,sizeof(char)*100);
strcpy(ptr,"hello world!");
free(ptr);
ptr=NULL;

作用:C语言中动态分配内存的函数为malloc(), 在用完后,要及时调用free()函数释放
弊端:每次分配完后需要手动初始化;过程麻烦、容易写得不规范,导致代码出现问题

new和delete(运算符)

char *p = new char;

char *ptr +new char[100]

区别
1.n/d 是运算符;m/f 是函数
2.n/d 按类型为单位;m/f 按字节为单位
3.n/d 能初始化;m/f 不能初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值