C++语言
-
范围for语句、
-
用于遍历一个序列、
-
int a[]{ 1,2,4,6,9 }; for (auto b : a)//将数值a的元素依次拷贝到b里面、 { cout << b << endl; } int a[]{ 1,2,4,6,9 }; for (auto &b : a)//添加&可以省去拷贝的动作、 { cout << b << endl; }
-
-
-
动态内存分配问题、
-
供程序使用的存储空间、
-
C语言分3个区域、
- 程序区、
- 静态存储区、
- 动态存储区、
-
C++分为5个区域、
- 栈 、一般函数内的局部变量存储区域、由编译器自动分配和释放、
- 堆 程序员使用malloc\new分配、用free\delete来释放、
- 忘记释放后系统会回收、系统执行完程序后回收、
- 全局、静态存储区域、、释放全局变量和静态变量static,
- 程序结束时会释放常
- 变量存储区
- 常量存储的区域
- 程序代码区、
-
堆和栈的区别、
- 栈、
- 空间有限、大小由系统规定空间、
- 自动分配、
- 堆、
- 只要不超实际物理内存且不超系统允许的最大内存之内都可以分配、
- 栈、
-
malloc和feee
-
在C语言中使用malloc和free来分配和释放内存、malloc和free是函数;
-
int* a = NULL; a = (int *)malloc(sizeof(int)); if (a != NULL); { cout << "分配成功" << endl; *a = 4; cout << *a << endl; free(a);//释放内存, }
-
malloc——动态内存分配、是函数就会有在末尾有括号、括号内容是形参、
-
strcpy 拷贝内存是直接拷贝、不管大小、如果溢出则只保留未溢出部分、溢出部分不保留、同时会覆盖其它内存内容、
-
strcpy_s则不会出现此错误、strcpy_s未了弥补strcpy的错误需要设置两个参数、第二参数是限制字符串大小字节、超过限制的字节则会报错、trcpy_s(a,10,"要拷贝的内容")、将要拷贝的内容拷贝到a里面、而10则是限制的字节数、也就是往a里面拷贝的内容不能超过10个字节否则会报错、本次字符串内容超过10个字节、
char* a = NULL; a = (char *)malloc(50*sizeof(int));//分配50个字节 if (a != NULL); { /*cout << "分配成功" << endl; *a = 10;*/ strcpy_s(a, 40," 拷贝的内容"); cout << a << endl; free(a);//释放内存, }
-
-
new和delete 是运算符(标识符)而非函数、
-
C++语言中使用、也是在编译阶段执行、
-
nwe和delete不仅和malloc和free的用途一样还会调用对象的构造函数、
-
三种格式、
-
指针变量名 =new类型标识符;
-
int* a = new int; if (a != NULL); { *a = 1; cout << *a << endl; delete a; }
-
-
指针变量名 =new类型标识符(初始值);表示初始值、
-
int* a = new int(10); if (a != NULL); { /**a = 1;*/ cout << *a << endl; delete a;}
-
-
指针变量名 =new类型标识符[内存单元 ];表示数组
-
int* a = new int[10];//整型数组 if (a != NULL); { int* b = a; *b++ = 10;//数组第一个值是10 a[0] 10 *b++ = 15;//数组第二个值是15 a[1] 15 *a = 1; cout << *a << endl; cout << *(a+1) << endl; delete[] a;//释放数组空间、 }
-
-
不要重复调用free和delete、第一使用是释放本次malloc和new的内存、重复使用时则不知道释放的时谁的内存、
-
有malloc必有free、有new必有delete、
-
-
-
-
nullptr、
-
C++11的新关键字、代表空指针、和null一样、但是null可以当成整型0使用、而cullptr则不可以、
-
nullptr避免指针与整型相混淆、
-
cout << typeid(NULL).name() << endl; cout << typeid(nullptr).name() << endl; 不同的类型、
-
对于指针的初始化中、和与指针有关的情况下尽量使用nullptr来替代null、
-