c/c++面试踩坑笔记

各种类型内存占用

分32位和64位

32位(内存字节)

char(1)

short(2)

int(4)

long(4)

long long(8)

float(4)

double(8)

long double(8(vs)/12(gcc))

size_t/ssize_t(4)

所有指针(4)

64位

char(1)

short(2)

int(4)

long(8)

long long(8)

double(8)

long double(8(vs)/16(gcc))

size_t/ssize_t(8)

所有指针(8)

以上所有无符号和有符号占用一样

堆和栈区别

堆和栈都是在内存上面分配空间,区别:

管理方式

栈:系统分配内存,自动回收

堆:手动分配,手动释放

内存大小

栈的内存空间小,固定受限

堆的空间大,几乎受限于整机内存大小

分配方式

栈:连续内存,向下增长

堆:零散内存,向上增长

访问速度

栈快,堆慢

生命周期

栈随函数调用/结束自动存亡

堆由代码控制生命周期

cin,get,getline区别

cin

c++的输入函数,读取输入,遇到空格或者\n就会停止比如

hello world,就只会读取到hello,末尾有\n会保留在缓冲区中。

get

无参的时候读取单个字符,包括换行空格。有参的时候读取一行,遇到\n停止,\n保留在缓冲区。

getline

读取一行,遇到\n停止,\n会读出来丢掉

getline(cin,str)

c++专属,整行读取,不限定长度,string自动扩容,遇到换行停止,\n自动丢弃。

get和getline区别

就是\n,get会不动他,getline会读取出来丢掉

坑点

cin和get/getline混用的时候比如:

cpp 复制代码
char str[100];
cin>>a;
cin.get(str,100);

cin了以后缓冲区中会残留\n,get或者getline看到\n会直接停止了,那么怎么解决这个问题呢,书上是在cin了以后调用一次get把\n吃掉,我网上查还有用ignore清掉残留。

string内存坑点

string是c++的变量类型,string的结构是指针+容量+大小+内部短字符缓冲区。

sizeof 测量的是string对象本身的大小,64位sizeof(str)=32字节,32位sizeof(str)=24字节,与存放的字符串长度无关。如果字符串<=15个字符,会存放到对象本身,如果>15个字符,会额外在堆上开辟空间存储len+1,但不影响sizeof(str)。

这里又区分c和c++

c的字符串char* p和char p\[\]

sizeof(p)=8,因为p是指针,不是内容,测量的指针在64位中就是8字节

char p\[\]="abc",数组大小=len+1,字符串末尾会有\0,len是字符个数。

c++的string操作更方便,c语言的两个字符串之间不能直接赋值,类似于数组,要循环加入,或者cstring中的使用strcpy复制或者使用strcat附加实现。而string支持直接赋值,拼接,附加。

另外size和length函数没有区别,返回的都是字符个数(去掉\0后的)

结构体坑点

c和c++的结构体差不多,但是有区别,c++的结构体可以放string类型(c++的专属)以及c++的结构体可以放成员函数,但是放了成员函数就和类没啥区别了。

枚举量坑点

枚举量enum只有赋值运算符没有算数运算符如++,但如果运算的值是有效的可以强制转换

常指针与指针常量

类型用模板T代表

指向常量的指针,用 const T *p或T const *p表示,是一个指针指向一个常量,指针的地址可以改变,但是他所指向的地址存的值不可以改变。

常指针,用 T *const p表示,表示常量指针类型,指针指向的地址不可以改变,但是指向的地址所存的值可以改变

指向常量的常指针,用 const T *const p表示,这种指针指向固定地址,并且该地址存的值也是固定不变的。

相关推荐
caimouse22 分钟前
ReactOS 窗口系统分析(5):可见区域与窗口 DC — vis.c + windc.c
c语言·开发语言
_Narcissus_2 小时前
动态规划初探(含完整代码实现)
c语言·数据结构·c++·算法·动态规划·背包问题·最短路径
Cerman2 小时前
QEMU启动OVMF shell超时分析
c语言·windows·经验分享
法哥20123 小时前
用 C++ 控制 CMW100,到底在干什么?
开发语言·c++
_Narcissus_4 小时前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举
冻柠檬飞冰走茶4 小时前
《数据结构实验指导-C++语言版》 在顺序表 list 中查找元素 x
开发语言·数据结构·c++·算法·list
Brilliantwxx4 小时前
【C++】 高阶数据结构图(1)并查集
开发语言·数据结构·c++
Fa_Mian_Tuan4 小时前
最小生成树之Kruskal算法(超详细原理+完整可运行C语言代码)
c语言·开发语言·数据结构·笔记·算法·图论
小鱼仙官5 小时前
Ubuntu C++ NTP校时程序
linux·c++·ubuntu
冻柠檬飞冰走茶5 小时前
《数据结构实验指导-C++语言版》 返回单链表 list 中第 i 个元素值
开发语言·数据结构·c++·算法·list