C++基础知识学习,范围for语句,提升遍历效率;动态内存分配问题;nullpter;

范围for语句,提升遍历效率

范围for语句,提升遍历效率
原本的遍历用法

int v[] = { 1,2,3,4,5,6,7,8,9,10 };
for (auto x : v)
{
	cout << x << endl;
}

上面这个遍历方法,实际上执行了拷贝过程,他要将v数组里面的每个项拷贝到x中,然后输出x的值
怎么解决这个问题呢?引用
下面这个就没有执行拷贝,而是输出的v自己地址上的值

for (auto& x : v)
{
	cout << x << endl;
}
动态内存分配问题

C++中详细分配了五个区域

  • 1、栈:一般函数内部的局部变量都会存放在这里,由编译器自动分配的释放
  • 2、堆:程序员malloc/new分配,用free/delete来释放,系统结束前不会自动释放
  • 3、全局/静态存储区:放全局变量和静态变量,程序结束时自动释放
  • 4、常量存储区
  • 5、程序代码区

堆和栈的区别
栈:空间有限,由系统分配,速度快,程序员无法控制
堆:只要不超过实际物理内存,也在操作系统允许的范围内,都可以给你分配,但是速度慢,可以随时用,可以分配十分巨大的内存
malloc(memmory alloction)/new来分配,不适用的时候要用free/delete来销毁
void *alloc(int byteSize)参数:字节长度,申请成功,返回头指针,失败返回NULL
void *返回的是可以强制转换为任何指针的类型
test1

int* p = NULL;
p = (int*)malloc(sizeof(int));
*p = 12;
cout << *p << endl;
free(p);//千万记得,不用的时候free

test2

char* p2 = NULL;
p2 = (char*)malloc(100 * sizeof(char));
if (p2)
{
	strcpy_s(p2, 100, "hello world , william_x_f_wang");
	cout << p2 << endl;
	free(p2);
}

test3

int* p3 = (int*)malloc(100 * sizeof(int));
if (p3)
{
	int* q = p3;
	//notice this format,this funny
	*q++ = 66;
	*q++ = 99;
	cout << *p3 << endl;
	cout << *(p3 + 1) << endl;
	free(p3);
}

但是C++中就是要用new/delete来分配内存,不能用malloc/free,那是c的
指针变量名 = new 类型标识符
指针变量名 = new 类型标识符(初始值)
指针变量名 = new 类型标识符[内存单元个数]

int* p4 = new int;
if (p4)
{
	*p4 = 123;
	cout << *p4 << endl;
	delete p4;//new出来的,千万不要忘记delete
}

int* p5 = new int(321);
if (p5)
{
	cout << *p5 << endl;
	delete p5;
}

int* p6 = new int[8];
if (p6)
{
	*p6 = 1234;
	*(p6 + 1) = 4321;
	cout << *(p6) << endl;
	cout << *(p6 + 1) << endl;
	delete[] p6;
}
nullpter

nullpter,避免整数和指针之间发生混合,因为NULL==0
int a = nullpter就会出错
函数重载的是很可能会有用
NULL和nullptr是不同的类型

	cout << typeid(NULL).name() << endl;
	cout << typeid(nullptr).name() << endl;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值