#include
using namespace std
int main(){
cout << "Hello world" << end1;
system("pause");
return 0;
}
定义float时 要在数据后面加上小写字母f(因为c++默认小数都是double) 所以加上一个f表示强制类型转换
科学计数法:e后面表示:10的多少次方
将此结果与e前面那个数相乘
1、在c++中 “<< endl” 就是换行的作用 也就是上面第一行代码等价于 cout << "hello world\n"
2、想要输出一个反斜杠 必须输入两个反斜杠
3、水平制表 可以使\t 后面的内容整齐的输出 \t前面会留出八个空格的位置 前面有几个元素就填几个位置
c++风格字符串跟定义变量是一样的 前提是要加上一个头文件#include
赋值时 赋值汉字true 或者 false 输出会对应输出1、 0
实际上 除了0 其他数都是真,习惯上用1代表真
逻辑与:同真为真 其他为假
逻辑或:同假为假 其他为真
else if 会排除前一个if的范围 所以设置各个if范围时 最好按照线性顺序进行设置
如下图
注意!!!
三目运算符返回的是变量 所以可以视为一个整体 继续赋值
1、case 结果后加冒号
2、每个case都要加break
3、最后如果都不满足 那么可以用default+冒号
4、
不过不建议使用
第二种是最全的
第一种和第三种均是省略了其中一部分
第三种会自动识别花括号里元素的个数
可以通过sizeof(数组名)来获取数组的总长度 单位是字节
sizeof(arr【0】)可以获取某个数据的长度
数组名是首地址 不用取地址符号 并且是常量
但是除数组名之外 取其他元素的地址的时候 要加取地址符&
轮数是外层循环
内层与外层存在某个关系 找到这个关系即可实现
第二种在使用时 还可以将其换行定义 不过注意要加逗号 这样更加的直观
总结:
1、利用sizeof来获取大小 同时还可以利用这个来计算出行数列数
2、二维数组存储的时候 也是一连串的存储形式 所以“整个数组的首地址”、“第一行首地址”、“第一个元素首地址”指的是同一个地址
功能:任意键继续
注意 函数声明的头文件里还要写
#include
using namespace std;
不然函数源文件链接到该头文件时 某些iostream库里的功能无法使用
函数的源文件 函数的定义写在一个源文件里 头文件用刚刚声明函数的头文件
自定义的头文件引用时 用双引号
在主函数中 引用#include
using namespace std;
以及 函数声明的自定义头文件 这样函数才可以正常使用
对于64位系统 指针变量(变量数据类型 * )所占空间为8字节
注意0到255编号的内存无法访问
野指针 就是随意找一块未申请的空间 强转为指针类型 这样是不被允许的 又可能会使用到正在使用的空间
对于这种没有申请的空间 不要进行访问
数组名赋值给指针变量 这样指针变量就拿到了数组的首地址 也是第一个元素的地址
之后对指针变量p++ 就可以移到下一个地址单元
结构体就是自己自定义一个数据类型 该数据类型是一些基本数据类型的集合,
对于结构体变量的创建以及初始化,常用的有两种方式 一种是无参构造,结构体类型名+结构体变量名
后续再对属性进行赋值
第二种是有参变量 结构体类型名+结构体变量名+“=”+{初始化属性}
数据类型是自定义的结构体类型,同时也是单个数组元素的类型
这样每个元素都是一个结构体变量 变量名就是数组加索引
指针类型与指向的数据类型对应 所以是struct student *p=&stu;
这样 指针就指向了某个结构体变量(这里以stu为例) 可以通过箭头来访问或者修改成员属性
教师结构体里嵌套学生结构体 直接数据类型(也就是结构体类型)+结构体变量
使用时 需要两层点
总之 单纯一个结构体变量传递的话 仅仅是值传递
如果传递取地址符+结构体变量 那么会传递结构体的地址 而另一边也应该定义一个指针来接收 例如 student *p
结构体地址做参数 可以节省空间 因为值传递会复制一份数据 而地址传递不会复制数据 但是地址传递会同步函数外面main函数的内容 所以为了防止在函数中对main函数的内容做修改 所以 用const来修饰函数的指针参数 相当于常量指针,指针的指向可以改 指针指向的值不可以改,进而增加了安全性
局部变量 一切在函数中定义的变量称为局部变量(包括main函数)
注意事项 不要返回局部变量的地址 因为局部变量在栈 函数执行完就会自动销毁
但是返回之后 编译器会对数据进行保留一次
但是第二次再调用该数据的地址 就不会保留“数据” 但是“地址”还是存在 所以可以调用地址 只不过调用出来解数据出来的结果是乱码
利用new关键字 开辟一个空间 并且可以给这个空间赋值 这个new这一部分会返回一段地址
接收到函数返回值之后 在main函数中用一个指针接收 这时 main函数接到了地址 并且是堆区数据的地址 由于栈销毁的是数据而不是地址 所以 可以持续使用该地址 并且可以解引用解码出来正确的数据 因为该数据不在栈 而是在堆
对于开辟一个数据 new + 数据类型+(初始化赋值),返回一个指针
最后要释放堆区数据 delete new时创建的指针变量;
对于开辟一个数组 new + 数据类型+【元素个数】
最后要释放数组 delete【】 new时创建的指针变量;
引用数据类型 给变量起一个别名 这样例如变量a、b使用的是同一块地址
语法 引用数据类型 +&别名=原名
此时main函数中的test01()相当于“int & a”
引用做返回值时 此时main函数中的test01()相当于“a的引用别名”
不可以返回局部变量的引用 因为局部变量在函数执行完之后 就被销毁了
引用做返回值时 此时main函数中的test02()相当于“a的引用别名”
返回静态变量的引用时 可以把函数调用当作左值 这样a的别名被重新赋值 那么a这块地址的变量也被重新赋值
这也就是为什么引用一旦初始化 那么无法更改引用 只能做赋值操作
1、定义引用变量时 原本是需要一个已经定义好了的变量空间 也就是给已知的变量起一个别名
但是如果直接赋值一个具体的数 是无法运行的
如果前面加了const 那么就可以直接赋值 这时编译器会临时创建一个变量给你使用 但是我们并不知道变量的名字
而且 现在的变量的值无法更改
2、但是 常量引用一般用在修饰形参
因为引用变量是地址共用,所以函数中的操作会影响到main函数,所以要做一些操作 防止函数中的操作影响到主函数
所以在形参前面加const 这样 引用变量(形参)就无法被再赋值了
语法
注意点 1、某个参数位置有默认值,那么这个位置往后都要有默认值
2、函数声明和函数实现不能同时有默认参数 ,默认值并不影响函数调用时的赋值,赋值优先
占位参数定义时,只写一个数据类型即可 无需写变量
调用时虽然定义的参数没有变量,但是仍然要传入一个对应类型的数
使用函数重载,可以提高代码的复用性 根据形参列表的不同 来区别不同的函数
1、引用可以作为重载的条件
区分引用参数是否加const
如果无const 那么一般的引用都会调用该函数
如果加了const 那么调用时 会与传入常量的那个调用语句对应
(注意点:引用参数如果不加const 那么只能接收栈区和堆区的变量,也就是局部变量和new出来的变量 常量属于全局区)
2、函数重载碰到默认参数
因为参数列表如果有默认参数 那么该参数位置可以不传入值
这样就会造成与“没有默认参数的函数”的传入列表相同的情况
所以,尽量避免用默认参数来进行函数重载