最近看了一些关于C/C++数据结构的视频,看到视频中有一些需要注意的问题,记录下来,以供以后方便查阅。
1、按F4可以遍历VS中出现的错误列表
2、System(”cls“)和Syetem("pause")分别用来清理屏幕和暂停。
3、C语言在堆内中申请单个int空间代码:int *p = (int *)malloc(sizeof(int));需要头文件malloc.h
C++堆内申请空间:int *p = new int;申请单个int变量 int *p = new int(5);堆内申请单个int 变量,并把这个int的空间初始化为5;
int *p = new int[10]; 申请10个int类型的数组
int **p = new *int[16]; 申请16个int *类型的指针数组。p[0]、p[1]、p[2]......等均为int *类型
4、结构体中的成员函数是不占内存的。
5、内联扩展是用来消除函数调用时的时间开销和空间开销。通常用于频繁执行的函数,对于一个小内存空间的函数非常受益。如果程序员没有指定内联函数,编译器可以决定哪些函数内联。
6、内联函数等价于宏函数。内联函数不产生入栈过程。
7、memset(this,0,sizeof(SStud));//SStud是一个结构体,函数功能:将里面的数据清零。memmove实现相同功能
8、数组与数组之间的赋值:如:char s[20];char m[20]; 用strcpy(s,m);
9、构造函数单个参数的时候可以用“=”初始化。如:SStud s1 = 32;等价于SStud s1(32);
10、拷贝构造函数,只有一个参数,而且参数类型是本类对象的引用。如他的实现如下:
SStud(const SStud &s){memcpy(this,&s,sizeof(SStud));}
11、析构函数:堆内的析构(手动析构 delete)。例如:SStud *Test(){return newSStud(1010,"李四",'m');}
SStud *p = Test();delete p;
12、链表:在动态空间可以申请任意空间。例如:int *p = (int *)malloc(sizeof(int)*n);//n是变量
13、内存分区:栈内存(默认初始化值为0xcccccccc);堆内存(默认初始化值为0xcdcdcdcd)
全局区(默认初始化值为0xcdcdcdcd);字符串常量区。
note:堆内存申请后,如果不在使用,及时清理。否则会产生内存泄露。
14、内存泄露:指程序员对堆区域的管理,只申请却不及时清理。包括离开main函数之后都没清理。
准确定义:指具有循环性质的对内存空间的浪费使用;例如:点击按钮就申请,但是并没有及时释放。
15、链表实现:1、定义一个节点struct SNode{DATA data; struct SNode *pNext;} *g_pHead;
2、实现链表的添删改查的功能,链表如图:
16、每次使用getchar()之前,记得使用fflush(stdin)清理,否则可能会出问题。
17、辗转相除法求最大公约数。例如:求400和98的最大公约数
伪代码:1、求a、b的最大值;2、while(a%b){int t=a%b;a=b;b=t}3、return b;
400%98 = 8;98%8 = 2 8%2 = 0;所以最大公约数是2
18、内存分区有哪些:栈区、全局区、堆区、字符串常量区(存储内容不允许修改)(代码区)
1.栈 - 由编译器自动分配释放
2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的 静态变量在相邻的另一块区域。- 程序结束释放
4.另外还有一个专门放常量的地方。- 程序结束释放
http://blog.csdn.net/lollipop_jin/article/details/8314304 参考链接
19、静态成员变量:在公司中,C++程序设计禁止使用全局变量和全局函数,而改用类(静态)成员变量和成员函数
静态数据成员的生存期为整个程序运行期。
在类内之事一个声明(不占空间),静态数据成员必须在类外进行定义和初始化。
20、指针的概念:a)指针的定义:一个内存变量或数组变量内存地址就是指针。
b)在32位操作系统中,任何内存变量的地址都是一个0--4G之间的数字
指针变量:a)指针变量:存放指针(内存地址)的变量称为指针变量
b)任何类型的指针变量的空间大小都是4个字节
c)指针变量记录的内存地址,也称为它指向的地址
指针变量的定义:int *p;
21、char s[] = "zhangsan";char *p = "lisi";
(1)数组所在的区域是栈区,可以对其内容进行改写。
(2)指针所在的区域是字符串常量区,不可以对其内容进行改写。
虽然p也在栈内,但是p记录的地址在字符串常量区
(3)两个指针地址相加(错)不能这样做
(4)两个指针地址相减(对)求距离
22、结构体变量
a)定义好了结构体之后,并没有占用内存空间,它只是一个类型,而不是一个变量。必须在定义一个对象之后,才实际的占用内存。
b)结构体本身不是变量,是一种类型
c)相当于一个结构体就是一个模板,在定义变量时依据模板在内存中申请空间。
typedef struct SStudnote:这有typedef和没有时,stud1和stud2的意思不同,一个是变量,一个是类型
{ 如果是变量,则不能定义在头文件中,否则链接的时候(link)会报错误,如:
int num; LNK2005: "struct SStud stud1" (?stud1@@3USStud@@A) 已经在
char name[10]; new_delete.obj 中定义
}stud1,stud2;
接下继续.....