面向对象的程序设计语言倾向于对象一定要经过初始化后,使用起来才比较安全
C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
初学者常因“构造函数”这个名称而认为构造函数负责为对象分配内存空间,其实并非如此。构造函数执行时,对象的内存空间已经分配好了,构造函数的作用是初始化这片空间。
只有这一个功能,构造函数没有原型链, 该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作
Complex cl; Complex c2(2) 这两个的用法 决定了是否是默认的构造函数呢 一个是默认的一个是有参的 如果是默认的那么有参的报错 如果自定义了有参的那么默认的报错
C++ 规定,任何对象生成时都一定会调用构造闲数进行初始化。
构造函数是可以重载的,即可以写多个构造函数,它们的参数表不同。当编译到能生成对象的语句时,编译器会根据这条语句所提供的参数信息决定该调用哪个构造函数。如果没有提供参数信息,编译器就认为应该调用无参构造函数。
CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址。
c = a + b; 等同于 0X3000 = (0X1000) + (0X2000); 但是计算机值认后面的 所以要编译 前面的产生后面的 如果是直接用后面的来写 就嘿嘿了
关于递归函数的算法 totel=function(初始的变量 运算符递 归的变量) 运算符 跟给出的条件的变量
int
i=
sizeof
(arr)/
sizeof
(
int
)
//这时的"i"就是数组的长度
/*sizeof()函数能求出数组的字节数,然后再除以相应的数组类型所占的字节数就能得出数组长度*/
if (arr[j]>arr[j+1]) //当前面的数比后面的数大时
{
double temp; //定义临时变量temp
temp = arr[j]; //将前面的数赋值给temp
arr[j] = arr[j+1]; //前后之数颠倒位置
arr[j+1] = temp; //将较大的数放在后面
对角线有主对角线和次对角线,主对角线是 ( i == j ),次对角线是 ( i + j == 矩阵维度 - 1 ),本例中次对角线是 ( i + j == 2 )。
for ( i = MAX; i > 0; i--)循环递减
指针连
当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。int **var;
当一个目标值被一个指针间接指向到另一个指针时,访问这个值需要使用两个星号运算符
p+i与&array[i]是等价的,而*(p+i)与array[i]是等价的 一个是地址的编码 一个是变量的值 都是代表的相同的鬼东西
结构体
结构体是一种特殊的类 他没有构造和析构函数 他是public 类是provate
dypedef是一种更简单的定义结构的方式
struct stu stu1, stu2; 可以是结构体数组,结构体指针,结构体数组指针,结构体指针作为函数参数
也可以不写名字
- struct{ //没有写 stu
- char *name; //姓名
- int num; //学号
- int age; //年龄
- char group; //所在学习小组
- float score; //成绩
- } stu1, stu2;
->
是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->
在C语言中的唯一用途。
最基本的读写操作
FILE *fp;
fp = fopen("E://tmp/dome.txt", "w+");
fputs("业务能力不熟悉!", fp); fputs是写入的操作 对应后面的w+ fgets是读取操作 后面看是否要输出到终端
char *fgets( char *buf, int n, FILE *fp ); 读取
fgets(buff, 255, (FILE*)fp); printf("2: %s\n", buff ); 读取+输出在终端
您也可以使用 int fscanf(FILE *fp, const char *format, ...) 函数来从文件中读取字符串,但是在遇到第一个空格字符时,它会停止读取。fscanf(fp, "%s", buff);
C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。
A simple practice in C 或 C++ 程序中,建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。
-l 是默认的下拉选项快捷键
头文件和宏的用法
强制类型转换 (double) 使用ascii码来的
递归 fibonaci(i-1)+fibonaci(i-2) i*fibonaci(i-1)
free(description);释放内存
使用初始化成员列表对对象进行初始化,有时是必须的,有时是出于提高效率的考虑
c++后初始化的机制,使引用和常量数据成员变为可能的,Student类的构造函数应为: student ::student(int i,int j):a(i),b(j){} 就是给a和b赋值
c++没有垃圾回收机制 但是他有析构函数 分为自动释放内存和根据变量的作用域离开之后释放内存 这个作用域的离开和js里面的垃圾回收差不多的 但是js里面是标记变量的进入和离开的环境
当变量进入执行环境(函数中声明变量)的时候,垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”,在离开环境之后还有的变量则是需要被删除的变量