- 博客(58)
- 资源 (2)
- 问答 (2)
- 收藏
- 关注
原创 10.5 常量引用
10.5 常量引用用const修饰的引用成为常量引用,这样引用关系不能修改,引用的数据也不能修改。常量引用经常用作函数的形参,这样可以方式误操作修改了实参。#include<iostream>using namespace std;void showValue(const int& val){ //val = 1000; //错误,常量引用不能修改值 cout << "val=" << val << endl;}int main()
2020-06-30 23:23:22 165
原创 10.4 引用的本质
10.4 引用的本质引用的本质其实是一个指针常量。也就是说: int &b = a;本质上是: int* const b = &a;回想一下引用的一个特性(引用一旦确定了引用关系就不能改变)不难发现,这与指针常量的特性一样。指针常量也是不能再改变指针指向的地址。...
2020-06-30 23:19:41 205
原创 10.3 引用做函数的返回值
10.3 引用做函数的返回值引用做函数的返回值时,不要返回局部变量的引用,这跟不要返回局部变量的指针时一个道理。因为局部变量在函数执行完毕之后就释放掉了,这样返回的引用也引用了一个寂寞,没意义。但跟之前一样,编译器仍会做一次保留。#include<iostream>#include<string>using namespace std;//不要返回局部变量的引用int& test1(){ int a = 10; return a;}int&
2020-06-30 23:12:03 150
原创 10.2 引用做函数参数
10.2 引用做函数参数引用做函数参数跟地址传递一样,可以通过形参改变实参。这里写三个函数,分别为值传递、地址传递、引用传递,对比其中的不同。#include <iostream>using namespace std;//1、值传递void swap1(int a, int b){ int temp = a; a = b; b = temp;}//地址传递void swap2(int* a, int* b){ int temp = *a; *a = *b;
2020-06-30 23:00:45 854
原创 10.1 引用的基本使用
10.1 引用的基本使用引用就是给一个已经存在的变量令起一个名字,这样一个变量就有了两个名字。并且通过这两个名字都可以访问这个数据。引用的基本使用如下:#include<iostream>using namespace std;int main(){ //引用 数据类型 & 别名 = 原名 int a = 10; int &b = a; cout << "a=" << a << endl; cout << "b
2020-06-30 22:43:59 123
原创 9.3 new操作符
9.3 new操作符new操作符返回的时对应数据类型的指针,所以要用一个指针区接收。数据使用完成后应及时释放,用delete关键字释放。还是上节的例子:#include<iostream>using namespace std;int* func(){ int *p = new int(10); return p;}int main(){ int* p = func(); cout << *p << endl; cout <&l
2020-06-30 00:17:38 91
原创 9.2 C++内存分区模型-程序运行后
9.2 C++内存分区模型-程序运行后9.2.1 栈区栈区存放局部变量、函数参数等,栈区的数据由编译器管理开辟和释放。由于局部变量在使用完后即销毁,所以不要返回局部变量的地址。#include <iostream>using namespace std;int* func(){ int a = 10; return &a; //返回局部变量的地址}int main(){ int* p = func(); cout << *p <<
2020-06-29 23:59:36 403
原创 9.1 C++内存分区模型-程序运行前
9.1 C++内存分区模型-程序运行前C++将内存大致分为4个区域:代码区存放程序的二进制代码全局区存放全局变量、静态变量、常量,程序结束后由操作系统释放栈区由编译器分配释放,存放局部变量等堆区由程序员管理释放,如果程序员不释放,程序结束后自动释放程序编译后,生成了exe可执行程序,在程序未运行之前,有两个区,分别是代码区和全局区。9.1.1 代码区代码区存放了exe的二进制指令,有两个特性:共享。对于一个exe,只存有一份指令,每次运行时都执
2020-06-29 23:27:23 157
原创 8.7 结构体示例二
8.7 结构体示例二本示例定义了5个人,再将这五个人按年龄升序排列。step1:定义好结构体。struct hero{ string name; int age; string sex;};step2:创建并初始化结构体。 hero heroarray[5] = { {"刘备",23,"男"}, {"关羽",22,"男"}, {"张飞",20,"男"}, {"赵云",21,"男"}, {"貂蝉",19,"女"}, };step3:利用冒泡排序对年龄升序
2020-06-29 20:17:10 198
原创 8.6 结构体示例一
8.6 结构体示例一本示例很简单,不过是把之前学到的知识点串在了一块。大致内容是创建一个教师数组,每个教师有三名学生,每个学生有一个成绩。先通过for循环对这些对象初始化,再将其打印出来。step1:首先创建好teacher和student的结构体。struct student{ string name; int score;};struct teacher{ string name; student sarray[5];};step2:再创建1个教师数组,包含3个对象。
2020-06-29 20:06:33 162
原创 8.5 结构体做函数参数
8.5 结构体做函数参数结构体只是一种自定义的数据类型,仍然可以像其他类型一样作为函数参数传递。下面的两个函数一个用值传递的方式打印学生姓名,另一个用地址传递方式打印姓名。#include <iostream>#include <string>using namespace std;struct student{ string name; int age; int score;};//值传递void printstudent1(student s){
2020-06-29 19:43:36 205
原创 8.4 结构体嵌套结构体
8.4 结构体嵌套结构体结构体中的成员可以是另一个新的结构体。下面定义的teacher结构体中有一个成员是student,而student是另一个结构体。#include<iostream>#include<string>using namespace std;int main(){ //结构体嵌套 struct student { string name; int age; int score; }; struct teacher { in
2020-06-29 19:38:41 1389
原创 8.3 结构体指针
8.3 结构体指针指针也可以指向结构体变量。当用指针访问结构体成员时,要把 . 改为->#include <iostream>#include <string>using namespace std;int main(){ struct student { string name; int age; int score; }; student s = { "张三",18,100 }; student* p = &s; //注意访问
2020-06-28 18:37:40 73
原创 8.2 结构体数组
8.2结构体数组跟普通数据类型一样,结构体也可以创建数组对象。#include<iostream>using namespace std;int main(){ //结构体数组 //1、定义结构体 struct student { string name; int age; int score; }; //2、创建结构体数组 student stuarray[3] = { {"张三",18,100},{"李四",28,99},{"王五",38,66}
2020-06-28 18:27:59 160
原创 8.1 结构体的定义和使用
8.1 结构体的定义和使用结构体是一种自定义数据类型,跟普通的数据类型具有相似的用法。#include <iostream>#include <string>using namespace std;int main(){ //结构体的定义格式 struct student { string name; int age; int score; }s3; //可以在定义结构体时顺便实例化一个对象 //使用点访问结构体成员 s3.name = "王五
2020-06-28 18:20:25 118
原创 7.7 指针、数组与函数的案例
7.7 指针、数组与函数的案例#include<iostream>using namespace std;void bubblesort(int* arr, int len){ for (int i = 0; i < len; i++) { for (int j = 0; j < len - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] =
2020-06-28 18:11:59 114
原创 7.6 指针和函数
7.6 指针和函数之前说过,值传递时,无论对形参进行什么操作都不影响实参。但如果形参传入的是指针,那么就会对实参产生影响。这是因为对指针解引用是直接操作实参所占用的那一块内存。#include<iostream>using namespace std;void myswap(int* p1, int* p2){ int temp = *p1; *p1 = *p2; *p2 = temp;}int main(){ //指针和函数,地址传递,会改变实参 int a
2020-06-28 18:01:42 85
原创 7.5 指针和数组
7.5 指针和数组数组名其实就是一个地址,可以直接用另一个指针来接收。#include<iostream>using namespace std;int main(){ int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int* p = arr; cout << "利用指针访问第一个元素:" << *p << endl; //无论数组元素是什么类型,p++都指向下一个元素 p++; cout <<
2020-06-28 17:53:05 126
原创 7.4 const修饰指针
7.4 const修饰指针名称表达式意义常量指针const int* p指针指向的值不能改,指针指向能改指针常量int* const p指针指向的值能改,指针指向不能改- -const int* const p指针指向的值不能改,指针指向不能改#include<iostream>using namespace std;int main(){ //常量指针,指针指向的值不可以改,指针指向可以改 int a = 10; const i
2020-06-28 17:47:02 80
原创 7.3 空指针和野指针
7.3 空指针和野指针空指针: 不指向任何地址。 int* p = NULL; //p是一个空指针,无法对其解引用。 *p = 100; //错误野指针: 指向一个非法的或已注销的内存。 //随便让p指向一个内存地址,这时再对p操作可能会修改系统中的某些数据,导致未知错误。 int* p = (int*)0x1100;睡意操作野指针是非常危险的做法,可能会使电脑崩溃。...
2020-06-28 17:40:08 129
原创 7.2 指针所占用的内存空间
7.2 指针所占用的内存空间指针变量跟其他常规变量一样,占用一定的内存空间,且占用的内存与所指向的数据类型无关。操作系统占用空间32位4字节64位8字节#include<iostream>using namespace std;int main(){ //指针所占用的内存空间,32位中4字节,64位8字节,无论数据类型 int a = 10; int* p = &a; cout << "p占用的内存空间:" <<
2020-06-28 17:30:50 1797
原创 7.1 指针的定义和使用
7.1 指针的定义和使用程序中定义的任何一个数据都有一个存放地址,而指针可以用来存放这个地址,并且可以通过这个地址在操作地址中存放的数据。如上图所示,用一块内存来存放数据a=10,这块内存的地址是0x0028。然后我么再定义个指针来存放0x0028这个地址。代码如下: int a = 10; int* p = &a;上面的代码,第一行我们定义了一个数据a=10;第二行定义了一个指针p指向a的地址。这里可以看出指针的定义格式:指针指向的数据是什么类型,就要用什么类型的指针来定
2020-06-28 12:20:17 251
原创 6.5 函数的分文件编写
6.5 函数的分文件编写在正规项目中,一般main函数所在文件只有一个卖弄函数,不包含其他内容。而把其他的类定义、函数之类的单多存放。本节介绍如何在一个单独的cpp文件定义函数。1. 首先像往常一样添加一个cpp文件用来写main函数。#include<iostream>#include "swap.h"using namespace std;int main(){ swap(1, 2); system("pause"); return 0;}2. 然后再添加头文件
2020-06-28 12:01:21 490
原创 6.4 函数的声明
6.4 函数的声明前面的例子都是函数定义写在函数调用之前,如果顺序反了就会报错。那么如何把定义放在后面呢,就要用到函数的声明。函数声明就是提前告诉编译器有这么一个函数存在,不用给我报错。声明就是函数定义的第一行加个分号。示例:#include <iostream>using namespace std;int main(){ int max(int a, int b); //这里先声明max函数 int a = 10; int b = 20; cout <<
2020-06-28 11:38:16 84
原创 6.3 函数常见样式
6.3 函数常见样式函数一共有四种常见样式:无参无返有参无返无参有返有参有返这四种形式定义如下:#include<iostream>using namespace std;//1、无参无返void test1(){ cout << "this is test1." << endl;}//2、有参无返void test2(int a){ cout << "this is test2. " << a <
2020-06-28 11:31:03 153
原创 6.2 值传递的特性
6.2 值传递的特性上节介绍的将实参复制给形参就是一种值传递,在函数体中对形参进行的任何操作不影响实参。代码验证:#include <iostream>using namespace std;void swap(int num1, int num2){ cout << "交换前:" << endl; cout << "num1=" << num1 << endl;; cout << "num2=" <
2020-06-27 21:52:05 171
原创 6.1 函数的定义
6.1 函数函数是实现某一功能的一段代码,它可以多次使用,增加了代码的复用性。语法:[返回值类型] [函数名称]([参数列表])下面是一个求和的函数示例:#include<iostream>using namespace std;//函数的定义,加法函数,返回和int sum(int num1, int num2) //函数定义时括号里的参数称为形式参数,简称形参{ return num1 + num2;}int main(){ int a = 10; int
2020-06-27 21:43:41 116
原创 5.2.2 二维数组案例-考试成绩
5.2.2 二维数组案例-考试成绩#include<iostream>using namespace std;int main(){ //二维数组案例-考试成绩 //1、创建二维数组 int scores[3][3] = { {100,100,100},{90,50,100},{60,70,80} }; string names[3] = { "张三","李四","王五" }; //、统计每个人总分 for (int i = 0;i < 3;i++) { cout
2020-06-27 14:43:30 333
原创 5.2.1 二维数组
5.2.1 二维数组二维数组的定义#include<iostream>using namespace std;int main(){ //二维数组定义方式 int arr1[2][3]; //两行三列 int zrr2[2][3] = { {1,2,3}, {4,5,6} }; int arr3[2][3] = { 1,2,3,4,5,6 }; int arr4[][3] = { 1,2,3,4,5,6 }; //一阶下标可以不标明,但二阶下标必须标明 //因
2020-06-27 14:39:25 97
原创 5.1.4 一维数组案例-冒泡排序
5.1.4 一维数组案例-冒泡排序冒泡排序的原理,建议参考视频讲解,这样会理解的更清楚。示例:#include <iostream>using namespace std;int main(){ //利用冒泡排序实现升序 int arr[9] = { 4,2,8,0,5,7,1,3,9 }; cout << "排序前:" << endl; for (int i = 0; i < 9; i++) { cout << arr[i
2020-06-27 13:59:35 291
原创 5.1.3 一维数组案例-元素逆置
5.1.2 一维数组案例-元素逆置示例:#include <iostream>using namespace std;int main(){ //逆置元素 int arr[5] = { 1,3,2,5,4 }; cout << "元素逆置前:" << endl; for (int i = 0; i < 5; i++) { cout << arr[i] << '\t'; } cout << endl;
2020-06-27 13:47:00 507
原创 5.1.2 一维数组案例-求最大值
5.1.1 一维数组案例-求最大值#include <iostream>using namespace std;int main(){ int arr[10] = { 24,88,24,51,130,33,109 }; int max = 0; for (int i = 0; i < 10; i++) { if (arr[i] > max) { max = arr[i]; } } cout << "最大值是:" << ma
2020-06-27 13:29:25 1393
原创 5.1.1 一维数组
5.1.1 一维数组数组是指一组类似个数组组成的集合,集中表示有利于管理。如一个班的所有同学可以用一个数组表示,同学1代表张三,同学2代表李四……本节介绍一维数组。语法:[数据类型] 数组名[数组长度];示例:#include<iostream>using namespace std;int main(){ //定义数组时必须确定初始长度 int arr1[5]; int arr2[5] = { 0,1,2 }; //后面的用0填充 int arr3[] = { 0
2020-06-27 13:18:40 128
原创 4.3.1 break、coninue、goto
4.3.1 break、coninue、goto关键词意义break立即跳出循环continue结束本次循环结束,直接进行下一轮循环goto跳到其他标识的地方1.break演示:#include<iostream>using namespace std;int main(){ //乘法口诀表 for (int i = 1; i <= 9; i++) { cout << i << endl; for
2020-06-24 00:29:16 117
原创 4.2.4 循环结构-嵌套循环
4.2.4 循环结构-嵌套循环一个循环里面可以再嵌套其他循环,叫做嵌套循环。用的最多的是for循环的嵌套。下面是一个打印乘法口诀的示例:#include<iostream>using namespace std;int main(){ //乘法口诀表 for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { cout << j << "×" << i
2020-06-24 00:05:11 317
原创 4.2.3 循环结构-for循环
4.2.3 循环结构-for循环语法:for([变量初值];[逻辑表达式];[变量变化规律]){[循环体]}实际上,for后面括号里的内容都能省略,只写两个分号就行。示例:#include<iostream>using namespace std;int main(){ for (int i = 0; i <= 9; i++) { cout << i << '\t'; } cout << endl; system("p
2020-06-24 00:01:29 1284
原创 4.2.2 循环结构-do while
4.2.2 循环结构-do while语法:do{[循环体]}while([逻辑表达式])当逻辑表达式为真时退出循环。示例:#include<iostream>using namespace std;int main() { //do while 先执行再判断条件 int num = 0; do { cout << num << '\t'; num++; } while (num < 10); cout << e
2020-06-23 23:40:13 174
原创 4.2.1 循环结构-while循环
4.2.1 循环结构-while循环循环结构是指重复地执行某一段代码,直到满足跳出循环的条件。while语法:while([逻辑表达式]){[循环体]}逻辑表达式为真时执行循环体。示例:#include<iostream>using namespace std;int main(){ int num = 0; while (num < 10) { cout << num << '\t'; num++; } cout <
2020-06-23 23:32:33 429
原创 4.1.4 选择结构-求最大值
4.1.4 选择结构-求最大值利用选择结构求三个数中的最大值:#include<iostream>using namespace std;int main() { int A = 0; int B = 0; int C = 0; cout << "请输入数A:"; cin >> A; cout << "请输入数B:"; cin >> B; cout << "请输入数C:"; cin >> C;
2020-06-23 16:04:56 384
原创 4.1.3 选择结构-三目运算符
4.1.3 选择结构-三目运算符语法:[逻辑表达式] ? [值1] : [值2];如果表达式成立,则返回值1,否则返回值2.示例:#include<iostream>using namespace std;int main(){ int a = 10; int b = 20; int c = 0; c = (a > b ? a : b); cout << "c=" << c << endl; //返回的值可以继续赋值 (a
2020-06-23 15:50:51 197
基于多态的职工管理系统.rar
2020-06-23
C++float转换为int的截断原理
2021-04-30
WPF文本框改变内容后为什么会触发两次TextChange事件?
2019-08-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人