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表示,这种指针指向固定地址,并且该地址存的值也是固定不变的。

相关推荐
小王C语言20 小时前
【8.进行接口测试】:通过 curl 进行接口自动化测试 / 通过 python 程序进行接口自动化测试
网络·c++
三克的油20 小时前
数据结构-4
数据结构
888CC++20 小时前
C++ 快速学习指南:从入门到进阶的实战路线
开发语言·c++
小小晓.21 小时前
C++记:函数
开发语言·c++·算法
驱动小百科1 天前
Windows运行库合集下载 VC++、DirectX、.NET运行库安装教程
c++·windows·.net·windows运行库合集下载·windows运行库安装
NoteStream1 天前
【c语言基础】C语言常见概念
c语言·开发语言·编辑器
charlie1145141911 天前
Cinux —— 给物理内存建账本:bitmap 物理内存管理器
开发语言·c++·操作系统·开源项目
0566461 天前
Python康复训练——数据结构
数据结构·windows·python
回眸不遇1 天前
将 Docker虚拟磁盘文件ext.vhdx迁移出C盘 ,更换到D盘
c语言·docker·容器
冻柠檬飞冰走茶1 天前
PTA基础编程题目集 7-27 冒泡法排序(C语言实现)
c语言·开发语言·数据结构·算法