C/C++学习笔记
文章平均质量分 71
记录自己所学知识点
我想养只汤姆猫
永远谦虚的做一个俗人
展开
-
static和inline配合修饰函数
1.预先了解的知识1.1 staticstatic关键字用途太多,以致于让新手模糊。不过,总结起来就有两种作用,改变生命期和限制作用域。如:修饰inline函数:限制作用域static和inline配合修饰函数修饰普通函数:限制作用域用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用,隐藏的作用修饰局部变量:改变生命期把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。共有两种变量存储在静态存储区:全局变量和 static 变量,原创 2022-05-09 18:19:40 · 2127 阅读 · 0 评论 -
(C++)理解 i++与++i
题目:要求获得50到100的累加结果1.想一下以下几种代码有什么区别,并分析错误原因1.1 第一种(正确):在while语句的statement中使用递增运算符 int sum = 0, val = 50; while (val <= 100){ sum += val; val++; //++val; } std::cout << "50到100总和:" << sum << std::endl;结果:50到100总和:3825原创 2021-08-31 20:49:45 · 311 阅读 · 1 评论 -
5-5.条件语句switch
switch的基本语法和规则一般采用switch语句用来简化if语句格式:switch (expression){ case constant: statemens break; default: break;}规则: expression分别与constant匹配,从上到下,匹配成功执行stateme...原创 2020-04-09 23:16:08 · 365 阅读 · 0 评论 -
5-3. 处理字符的函数集:cctype
首先我们需要引用ccttype的头文件#include<cctype>头文件中的函数isalnum() 如果参数是字母数字,即字母或数字,该函数返回true isalpha() 如果参数是字母,该函数返回true isblank() 如果参数是空格或水平制表符,该函数返回true iscntrl() 如果参数是控制字符,该函数返回true isdigit() 如...原创 2020-04-09 23:15:06 · 221 阅读 · 0 评论 -
5-2. 逻辑表达式和短路问题
与:&&(左右两个表达式均为真才表示真)或:||(左右两个表达式至少一个为真才表示真)非:!(相当于取反,对真做非运算为假,对假做非运算为真)int m = 20; int n = 30; if (m == 20 && n == 30) { cout << "m == 10 , n == 30" &l...原创 2020-04-09 23:14:39 · 537 阅读 · 0 评论 -
5-1.条件语句if和do...while(0)形式的宏
if格式:if(test_condition){ statement;//若条件为真则执行下列语句}注意:C++中if条件语句的test_condition语句不一定是bool类型,所以有时候由于粗心会出现这样的问题,此时编辑器不报错,条件被永远判断为真 int i = 100; if(i=10) { cout << i << e...原创 2020-04-09 23:13:55 · 1424 阅读 · 1 评论 -
4-8.goto语句与深层循环
goto语句作用跳出深层循环(嵌套的循环)实现循环(与汇编的实现方式类似)跳出深层循环实现#include<iostream>using namespace std;int main(int argc, char* argv[]){ //为了理解goto语句,我们解决下面一个问题为例 /* 一个数列: 1 2 3 4 5 6 7 8...原创 2020-04-07 00:21:29 · 1167 阅读 · 2 评论 -
4-7.自增(++)、自减(--)和组合赋值操作符(+=、-=)
自增和自减只能用在整数的变量中前自增:++a,在将a用在表达式之前先自加后自增:a++,在将a用在表达式之后再自加前自减:–a后自减:a–自加自减无论前后意义都是+1或者-1,单独使用没有任何区别。区别主要在于表达式中。#include<iostream>using namespace std;int main(int argc, char* ar...原创 2020-04-07 00:19:54 · 328 阅读 · 3 评论 -
4-6.循环退出(break)与继续(continue)
break:终止当前的循环语句continue:忽略本次的循环,继续下一次循环#include<iostream>using namespace std;int main(int argc, char* argv[]){ /*************************break*************************/ for (int i = 0;...原创 2020-04-07 00:18:05 · 441 阅读 · 0 评论 -
4-5. do...while循环
do…while与while循环最明显的区别do…while:先执行后判断条件while:先判断条件后执行#include<iostream>using namespace std;int main(int argc, char* argv[]){ //while(test_condition) body //do body while(test_cond...原创 2020-04-06 13:25:26 · 259 阅读 · 3 评论 -
4-4. while循环
格式:statement1while(test-expr) statement2statement3举例:执行顺序原创 2020-04-06 13:21:34 · 534 阅读 · 0 评论 -
4-3.集合与指针
#include<iostream>#include<array>#include<vector>using namespace std;int main(int argc, char* argv[]){ //集合与指针(begin&&end) int arr_int[4]{ 1,2,3,4 }; //我们可以用for循环或者f...原创 2020-04-06 12:32:18 · 275 阅读 · 0 评论 -
4-2用for-in循环枚举集合中的元素
for-in循环和for循环的区别for - 循环代码块一定的次数for/in - 遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)#include<iostream>#include<array>#include<vector>using namespace std;int main(int argc, char* argv...原创 2020-04-06 00:05:23 · 303 阅读 · 0 评论 -
4-1for循环
格式:statement1for(init_expr;test_expr;update_expr) statement2;statement;举例:cout<<"before for"<<endl;for(int i = 0; i < 10; i++) cout<<i<<endl;cout<<"after...原创 2020-04-04 00:39:42 · 370 阅读 · 0 评论 -
3-31数组模板使用基础(C++11)
vector动态分配内存空间,比较占用资源,所以C++提供了数组模板使用数组模板需要引用“array”头文件数组模板在定义上与数组定义有点差别,其他都差不多#include<iostream>#include<array>using namespace std;int main(int argc, char* argv[]) { //定义一个数...原创 2020-04-04 00:29:07 · 322 阅读 · 0 评论 -
3-30vector模板类基础
将vector模板类看作动态数组作为数组或栈来使用使用vetor模板类时需要引用“vector”这个头文件vector<int> value; //动态添加三个元素,使用push_back添加到末尾 value.push_back(20); value.push_back(40); value.push_back(60); //删除指定的元素 //valu...原创 2020-03-31 20:42:58 · 293 阅读 · 0 评论 -
3-29多维数组和多级指针
使用1维数组来表示多维数组int codes1 [8] 取整计算行 取余计算列// 8/5=1(第2行) 8%5=3(第四列)使用多维数组来表示一维数组int code2[1][2] //1*5+2=7=code[7]一般我们最多使用到三维数组,三 维数组表示一个立方体,在opengl常用,很少用到四维数组;三维数组的赋值int codes3[5][10]...原创 2020-03-31 20:42:20 · 390 阅读 · 0 评论 -
3-28使用new动态创建共用体
创建一个共用体union Myunion { int code1; long code2; };创建一个共用体指针,给code1赋值并输出Myunion *p = new Myunion();p->code1 = 200;cout<<(*p).code1<<endl;共用体数据储存在低八位上,所以此时查看code2的值也是40...原创 2020-03-31 20:41:41 · 319 阅读 · 0 评论 -
3-27使用new动态创建结构体
定义一个结构体struct Mystruct { int code; char *name; double price; };创建一个结构体指针并分配内存Mystruct *p = new Mystruct();分配name的储存空间并赋值(指针用箭头)p->name = new char[30];strcpy(p->name,"Iphone...原创 2020-03-31 20:40:53 · 1905 阅读 · 0 评论 -
3-26常量指针与指针常量
常量指针概念:指针所指向的内存空间,空间中的数据只可以读不可以改。const int code =1234;//code就不可以更改了,const int numbers = {1,2,3,4};//同上创建一个常量指针(常量指针通常在声明时初始化)const int *p = new int(100);//这个内存空间赋值100(我们创建的const普通类型的变量必须...原创 2020-03-31 20:39:47 · 218 阅读 · 1 评论 -
3-25指针与字符串
创建与输出char str[10] = "Hellow ";cout<< str <<endl;创建一个指向字符串的指针(C++11并不建议这样使用)char *p_str[10] = "Hellow ";cout<< p_str <<endl;//结果:Hellow(系统会认为这是一个指向字符常量的字符串指针,这种不允许修...原创 2020-03-31 20:38:00 · 260 阅读 · 0 评论 -
3-24使用动态创建的数组
目标:赋值与获取响应元素的值初始化赋值方式int *array{1,2};//等同与//int array[10] = new int [10]{1,2};array[2] = 40;array[3] = 50;使用指针方式引用数组元素//cout<<array[1]<<endl;//等同于cout<<*(array+1)&l...原创 2020-03-31 20:36:55 · 338 阅读 · 0 评论 -
3-23动态创建与释放数组
使用new动态创建数组可以在任何地方动态分配数组所占用的空间。开始创建int *array3 = new int [100];现在我们创建一个400字节大小的数组我们可以继续创建更大的内存空间,但是我们需要先把之前的内存释放,否则会造成内存泄漏,这里释放的方式有所不同。delete [] array3;判断数据的内存空间是否被释放在调用delete之后,一般我...原创 2020-03-31 20:36:11 · 339 阅读 · 0 评论 -
3-22使用delete释放内存空间
我们使用new分配的内存空间,如果我们不使用delete释放,那么内存是不会自动释放的,这样就会造成内存空间的泄露。如果这样的情况比较多,那么会造成系统的内存空间逐渐枯竭,从而导致程序的崩溃。举例:分配一个内存空间int *n = new int;*n = 123;释放delete n; 注意delete只能释放使用new分配的内存空间,不能释放...原创 2020-03-31 20:29:15 · 2805 阅读 · 0 评论 -
3-21使用new关键字分配内存空间
以往我们赋值指针变量int xyz = 100;int *p = &xyz;C 语言中,我们常使用malloc函数来分配内存空间C++中,我们尽量需要多使用new关键字typename *pointer = new typename;举例:====int *pointer = new int;此时,我们分配了4个字节大小的内存空间将其首地址赋...原创 2020-03-31 20:23:04 · 1689 阅读 · 0 评论