« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
|
|
[C/C++]C/C++复习笔记 一 |
Variable(变量)用来存储数据的可变对象,在C/C++中当定义一个变量之后编译器就会给这个变量分配一定的存储空间。Function(函数)创建一个函数type functionName(type var... ){...(return var;)}函数返回值:第一type是函数的返回值可以是任何内建类型(int,float),或者自定义类型(strut,class)也可以是void即不会返回任何值。函数参数列表:第二个type 以及后面的var 就是函数的参数列表。在c中当参数传递一般认为有两种形式,传值和传值指针。在C++中除了以上两种形式以外还有一种传引用(reference)。你可以把reference看成是一种安全的指针类型。 流程控制1.if else2.switch-case3.for4.while5.do-while6.goto 1和2是条件控制,3,4,5是迭代(iterator)控制(循环),6无条件跳转(建议不使用)break 和continue关键字break是用于跳出整个循环,continue是用于跳过某次循环比如说:for(int i=0;i<10;i++){if(i%2==0)continue;//如果i是0或者偶数跳过elseprint(i);//如果是奇数打印这个数}out:0,2,4,6,8 int i=10;while(true){if(i==7){break;//跳出循环}else{print(i);}i--;}out:10,9,8 struct以及class在C/C++中定义一个结构体structtypedef strut stu{//定义结构体long stuID;string name;string dep;char sex;int age;}Student;//结构体别名这里的typedef就是给这个这个结构体stu起一个别名叫student关于边界对齐对于struct内存分配,编译器会对struct中成员进行边界对齐,例如:上例中int age的内存起始地址必须是sizeof(int)的正整倍数,因此会对char sex后面会空若干个字符,如果使用sizeof(Student)时,得到数字大于所有字段加起来的值。因此,在写strut时应该尽量将同类型的变量放在一起,特别是char类型,这样可以节省空间。关于struct的自引用stuct在建立时如果要引用自己,比如:typedef struct stu{//定义结构体long stuID;string name;string dep;char sex;int age;//!struct stu monitor 编译错误,因为struct没有建立,这样就陷入循环中struct stu* monitor;//要这样使用}Student; class的声明在C++中只要定义一个变量,编译器就会为这个变量分配空间,可以使用new关键字在堆里申请空间.ClassName obj;//在栈里分配,程序结束后会被收回和ClassName obj2 = new ClassName();都会被分配空间,如果不使用delete是不会被收回的,内存泄露memory leak声明以及定义声明一个名称,告诉编译器这个名称,定义就是告诉编译器分配制定的存储空间,对于变量来说,分配的是这个变量存储数据的空间,对于函数来说是一个指向存储着函数代码的空间的函数指针在头文件中声明:#ifndef HEADFILENAME_H_#define HEADFILENAME_H_... #endif //HEADFILENAME_H_使用构造函数(Constructor)和析构函数进行初始化和清理class Student{public :Student();//缺省构造函数Student(string name);//自定义构造函数Student(Student&);//拷贝构造函数~Student();void setName();string getName();private:string _name;}; 构造函数和析构函数的调用不依赖于程序员,编译器自动调用构造函数用于初始化一些变量,而析构函数用于清理诸如网络连接,屏幕显示(以及该对象执行过程中所使用的某些对象,比如用new产生的,在这里可以用delete清除)等等。1.缺省构造函数不带参数的构造函数2.拷贝构造函数参数为自身引用的构造函数 NOTE*:析构函数不会自动清理自身内存(他不是垃圾回收器grabage collector)。 函数参数传递--传指针引用以及传值在C++中一直都有传值和传指针的说法。C++中的指针指针的定义,Type* p;string* p; Student* stu;等等,所谓指针就是指向特定存储空间的一个变量。比如说 string str = “Aelx Loves Chris!”;string* p = &str; C++中的引用引用的定义,引用必须指向某个值,Type& r= variable;//或者是某个常量。比如说: int& r = 12; Student& stu =student;举个错误例子 string& s=NULL;//!ErrorC++中的引用可以看成是变量的别名,这就意味着,如果任何一个改变了,两个就都改变了比如说:交换两个值void changeByPointer(string* str1,string* str2){//传指针string t;t=*str1; //把str1所指向的空间的值付给t*str1= *str2;//把str2错指向的空间的内容放入str1的空间*str2= t;}void changeByReference(string& str1,string& str2){//传引用string t=str1;str1=str2;str2=t;} void changeByValue(string str1,string str2){//传值,交换会成功,但不会影响外部string t =str1;str1=str2;str2=t;} 参数传递过程中,传引用和传值本质上都是对该存储区域的直接操作,而传值,在传递过程中是,会在堆栈中建立一个区域,存放参数的副本,在函数内部对这些副本的操作,不会影响到外部,当函数运行结束后,这些副本都回失效。 | |
|
|
|
统计 |
blog名称: 日志总数:7 评论数量:9 留言数量:0 访问次数:40195 建立时间:2006年1月7日 | |