c++回顾(一)基本概念

今年找工作,发现算法岗是僧多肉少,基本面试都被问到关于c++的问题,长期以来一直关注算法更新,c++开发相关部分已丢弃脑后,几次面次碰壁之后,现决定重新稳固c++相关知识,如有错误,欢迎指导。还有疑问,string 是在常量区么?

1、c++内置类型(分为两组,基本类型和复合类型)

基本类型包括整数浮点数以及两者的多种变体

复合类型包括数组、字符串、指针、引用、结构体和共同体等

2、c++的基本整型:按照宽度递增,有char(1字节Byte)、short(2字节)、int(4字节)、long(32位4字节,64位8字节),且都有有符号和无符号版本

3、内存分区(很重要的一点,一般来说有5区):

1)堆区:由程序员手动分配和释放的,完全不同于数据结构中的堆,分类方式和链表差不多

c++里面分配合释放,注意要有[],不然只会删除p中的第一个元素,c语言是malloc和free配合使用

int *p = new int[20];
delete[]p;

2)栈区:由编译器自动分配和释放,如存放函数的参数值、局部变量等

3)全局(静态存储区):存放全局变量和静态变量,注意,包括DATA段(存放初始化全部变量和静态变量)和BSS段(存放未初始化的全局变量和静态变量,在BSS段,程序执行之前会自动清0)

4、文字常量区:常量字符串存放在这里,程序结束后,系统自动释放

5、程序代码区:存放函数体的二进制代码。

下面一段小程序可以简单帮组理解一下c++中的内存分区:

#include<iostream>
#include<string>
using namespace std;
int k = 1;//全局变量区
void main()
{

	int i = 1;
	char *j;
	static int m = 1;//有static不管在哪里,都在静态变量区
	string n = "hello";//string可以修改,应该是在栈区吧
	char a[] = "hello";//位于栈上,有6个元素,含有字符串末尾的空字符
	j = new char[2];//栈区
	delete[]j;//及时释放
	cout << "栈区地址: " << &i << endl;
	cout << "堆区地址: " << &j << endl;
	cout << "全部变量地址: " << &k << endl;
	cout << "文字常量区还是栈区?我不懂: "<<&n << endl;
	cout << "程序区地址: " << &main << endl;
	system("pause");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值