c++学习笔记(部分适用于c语言)

前言:

首先,纠正一个可能的认知错误。编程语言并非专指以某种名称命名的语言,而是一类编程规范,或者说语法规则。

拿BASIC(初学者通用指令代码)举例, 基于BASIC衍生出了VB、QB等语言,它们统称为BASIC语言,完全适用于BASIC的语法,但由于开发者的目的不同,他们又有各自适合的方面。VB是微软公司开发出的可视化编程语言,可以很容易开发出拥有图形界面的软件。QB也是由微软基于BASIC开发的,但它是面向过程的。

笔记:

1.using namespace std;不要用在头文件里,可能会造成命名冲突,在源文件里可以适当使用。

2.播放声音:使用mciSendCommand函数播放声音时,需要这样,而且位置不能变

#include<windows.h>
#include<Mmsystem.h>
#pragma comment(lib,"winmm.lib")

3.不要使用delete多次释放同一个用new产生的变量,最好new和delete配套使用。

4.头文件中只能放声明,执行代码放到.cpp/.c文件中,用#include导入头文件。使用“#include<>”时,编译程序会自动到默认文件夹下寻找头文件,使用“#include“””时,编译程序先在用户文件下寻找头文件,没有的话再回到默认文件夹寻找。因此,自定义的头文件应放在与你的.cpp/.c文件同一目录下,用“#include""”导入。

5.算法是整个程序中最关键的部分,一个良好的算法会使程序的执行效率非常高,因此,不要在没想清楚的情况下就直接去写程序,走一步算一步的编程思维会浪费你更多的时间,慢慢的你就会发现程序会越写越复杂,每一段程序都是在给之前的程序填坑。以至于最后写出来的程序即使能执行,效率也十分的低下,还会隐藏更多的错误。

6.使用vector可以灵活的定义数组。当你不知道要用多大的数组时,可以使用vector,任意修改数组的容量,向其中加入元素。如果本来数组就可能会有很多元素,建议在声明时就声明一个合适大小的数组,不够再添加就行了。这样有助于提高程序效率,vector每添加一个元素,就会检查是否有足够的容量储存,不够的话,会自动寻找一个比原数组大1.5到2倍的储存存空间,再把数组复制过去,这就解释了为什么应该预定义一个合适大小的数组。要包含头文件vector

7.在很多编译器中,对于main()的定义多为int main(),而不是void main()

8.char类型事实上可以看做整数操作,范围是-128~127。而''(单引号)可以把里面的字符转化为对应的ASCII码。既然可以看作整数,那么for(char i=0;i<100;i++);也是合法的操作;int占4字节,short占2字节,char占一字节,掌握这个后,就可以尝试区优化程序的结构。

比如:char ch='5';//这句话把5对应的ASCII 码赋值给ch,当你用“”是便会出错,因为双引号引起的是字符串。

9.c/c++中数组的名称代表的是该数组第一个元素指向的地址,也就是这个数组的开始地址;例如int num[20];//其中num指向的是num[0]对应的地址,num==&num[0];当定义一个指针时,你也可以向数组那样操作它,例如char* ch;//ch[0]=*ch,ch[1]就是*ch之后的地址对应的值;关于指针的说明在下面

10.指针:举例来说char* ch;//这句话定义了一个名称为ch的指针,ch的值是一个地址,*ch的值是该地址对应的值;“*”又叫解除引用符号;如果要给它赋值,可以这样:char b=20;ch=&b;或者把一个数组赋给一个指针char b[20]="zxcvbnm";ch=b;基于这样的使用,我们就可以让自定义的函数返回一个数组的指针,例如:

int* function()
{
int* num=new int(3);
num[0]=20;
num[1]=30;
num[2]=40;
return num;
}
11.关于for循环的使用:典型的用法是for(int i=0;i<20;i++){}//循环体如果只有一条语句,则可以省略{};否则必须加上{}。因此,对于循环嵌套可以是:

for(i=0;i<20;i++)
for(j=0j<20;j++){}
上面的代码中将会执行400次循环。
当你要依次输出用vector定义的数组时可以这样:

vector<int>num(20);
for(int it=num.begin();it!=num.end();it++)
cout<<*it;
12.三目运算符(?:),可以把if(){}else{}语句简单化,例如if(20>30){cout<<"20>30"}else{cout<<"30>20"}可以写成20>30?cout<<"20>30":cout<<"30>20"

13.预编译:#define的作用是在编译时替换文本;类似于定义常量,例如:#define pi 3.1415926535 //定义了圆周率pi;

但切记,#define只是单纯的文本替换,并非正式的执行语句。

举例:

#define max(a,b) a>b?a:b
这段代码定义了一个可以比较出最大值的函数max().

另外,还有条件编译指令(#if、#elif、#else、 #endif),常见用法如下:

#ifdef(fun1)//如果已经有宏定义fun1,则
//代码
#elif(fun2)//否则如果有宏定义fun2,则
//代码
#else//否则
//代码
#endif
使用#if可以避免重复定义。

还有#pragma、#program等指令,具体参见百科

猜你喜欢

转载自blog.csdn.net/lindorx/article/details/79051525
今日推荐