C/C++基本知识(一)

from http://blog.csdn.net/peng825223208/article/details/41388607

最近看了一些关于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;



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值