(个人笔记 ) C/C++基础知识(三)

Linux C/C++ 学习路线 一、秋招 Linux C/C++ offer 情况 二、Linux C/C++ 方向的一些思考 三、计算机基础知识的梳理 四、C++ 方向的深入学习路线 五、项目 + 亮点 + 面试的一些思考 六、总结 前言 Linux C/C++ 从零基础到大神的学习路线,自己的真实学习路线,干货很多,建议收藏,认真阅读。 在校期间,我一直走的都是 Linux C/C++ 学习路线,历经暑期实习、秋招决战、校... 阅读详情


紧接(个人笔记)C/C++基础知识(二)

结构体

基本用法

用户自定义的数据类型,允许用户储存不同的数据类型
定义
struct 结构体名{结构体成员列表};
举例

#include <iostream>
#include <string>
using namespace std;
 //定义结构体
struct student
{
	string name;
	int age;
};
int main()
{
	//使用
	student stu;
	stu.name = "张三";
	stu.age = 20;
	cout << "姓名: " << stu.name << "  年龄:" << stu.age << endl;

	system("pause");
	return 0;
}

结构体数组

定义方式没变,但是创建变量时改变。
举例

#include <iostream>
#include <string>
using namespace std;
 //定义结构体
struct student
{
	string name;
	int age;
};
int main()
{
	//使用
	student stu[2];
	stu[0].name = "张三";
	stu[0].age = 20;
	stu[1].name = "李四";
	stu[1].age = 18;
	cout << "姓名: " << stu[0].name << "  年龄:" << stu[0].age << endl;
	cout << "姓名: " << stu[1].name << "  年龄:" << stu[1].age << endl;
	system("pause");
	return 0;
}

结构体指针

定义方式一样,创建有所区别
注意访问成员变量的方式 “->”

#include <iostream>
#include <string>
using namespace std;
 //定义结构体
struct student
{
	string name;
	int age;
};
int main()
{
	//使用
	student stu;
	student* ptr = &stu;
	ptr->name = "小芳";
	ptr->age = 18;
	cout << "姓名: " << ptr->name << "  年龄:" << ptr->age << endl;
	system("pause");
	return 0;
}

结构体嵌套结构体

利用两个“ .”进行访问成员列表即可

内存四区

  • 编译生成的exe可执行文件,未执行该程序前为代码区和全局区
  • 程序运行后,栈区和堆区

代码区

特点

  • 存放函数体的二进制代码,由操作系统进行管理
  • 共享----对于频繁被执行的程序,只需要一份代码即可
  • 可读----不可写,安全性
  • 存放CPU执行的机器指令

全局区

  • 存放全局变量和静态变量以及常量(字符串常量和const修饰的全局变量)
  • 该区域的数据在程序结束后由操作系统释放
  • const修饰的局部变量不在全局区

栈区

注意,不要返回局部变量的地址
特点

  • 局部变量存放在栈区,栈区的数据在函数执行完后自动释放

堆区

主要利用new在堆区开辟内存
语法:
开辟
new创建一个堆区的数据为整型的10,返回一个地址。让栈区的指针指向这个地址。

int* p = new int(10);

释放
释放new开辟的内存,用delete关键字

	delete p;	//变量
	delete[] arr;//数组

引用

作用:给变量取别名
语法:数据类型 & 别名=原名;

注意:

  • 引用必须初始化
  • 一旦初始化,就不可以更改(引用很专一)

应用场景:作为函数的形参,可以修饰实参
引用用作函数参数

#include <iostream>
using namespace std;
//引用作为函数参数
void swap1(int &num1,int &num2)
{
	int temp = num1;
	num1 = num2;
	num2 = temp;
}

int main()
{
	int a =10;
	int b =100;
	cout << "应用作为函数参数,交换前:" << endl;
	cout << "a= " << a << "  b= " << b << endl;
	swap1(a, b);
	cout << "应用作为函数参数,交换后:" << endl;
	cout << "a= " << a << "  b= " << b << endl;

	system("pause"); 
	return 0;
}

在这里插入图片描述
引用用作函数的返回值
1.不要返回局部变量的引用

#include <iostream>
using namespace std;
//返回局部变量的引用
int & add(int num1,int num2)
{
	int sum = num1 + num2;
	return sum;
}

int main()
{
	int &c=add(10,10);
	cout << c << endl;
	cout << c << endl;//错误数据
	system("pause"); 
	return 0;
}

2.引用用作函数的返回值

#include <iostream>
using namespace std;

int & add(int num1,int num2)
{
	//静态变量,在全局区
	static int sum = num1 + num2;
	return sum;
}
int main()
{
	int &c=add(10,10);
	cout << c << endl;
	cout << c << endl;
	add(10, 10) = 1000;
	cout << c << endl;
	cout << c << endl;
	system("pause"); 
	return 0;
}

在这里插入图片描述
3.引用的本质在c++内部的实现是一个指针常量

	int &ref=a;	//本质int *const ref =&a;
	ref=20;		//本质 *ref=20;

4.常量引用

	const int &a=10;

函数提高

函数的形参列表可有默认参数

#include <iostream>
using namespace std;

int sum(int a, int b = 10, int c = 10)
{
	return a + b + c;
}
int main()
{
	int s = sum(10);
	cout << s << endl;

	system("pause"); 
	return 0;
}

在这里插入图片描述
注意事项
1.默认参数从左到右必须全部初始化

(int a,int b,int c=10,int d=10)//从变量c开始后免得变量都必须初始化

2.函数的声明和定义,只能有一个有默认参数

函数的形参列表中可以有占位参数

在调用时必须补全

#include <iostream>
using namespace std;

int sum(int a, int b , int )
{
	return a + b ;
}
int main()
{
	//在调用时补全
	int s = sum(10,20,10000);
	int s1= sum(10, 20, 20000);
	cout << "s= "	<< s  << endl;
	cout << "s1= "  << s1 << endl;
	system("pause"); 
	return 0;
}

在这里插入图片描述
占位参数还可以有默认参数

#include <iostream>
using namespace std;

//占位参数有默认参数
int sum(int a, int b , int = 10 )
{
	return a + b ;
}
int main()
{
	//已有默认参数,不需要三个参数,写了三个也不报错
	int s = sum(10,20);
	int s1= sum(10,20);
	cout << "s= "	<< s  << endl;
	cout << "s1= "  << s1 << endl;
	system("pause"); 
	return 0;
}

在这里插入图片描述

函数重载

  • 函数名可以相同,提高复用性

条件

  • 同一作用域下(全局区)
  • 函数名称一样
  • 形参的顺序,数量不同,参数类型不同

返回值的类型不同不可做为重载条件

注意
1.引用作为重载的条件

#include <iostream>
using namespace std;

//1.函数在全局区
int  add(int& a)
{
	cout << "第一个函数:"<<endl;
	int sum = 0;
	sum *= a;
	return sum;

}
//2.函数名一样
//3.参数类型不同
int  add(const int& a)
{
	cout << "第二个函数:" << endl;
	int sum = 0;
	sum += a;
	return sum;
}
int main()
{
	int a = 20;
	cout << add(10) << endl; //此处调用的是第二个函数
	cout << add(a) << endl;  //此处调用的是第一个函数
	system("pause"); 
	return 0;
}

在这里插入图片描述
2.重载碰到默认参数

	void func(int a,int b=10);
	void func(int a);
	func(10);   //出现二义性,无法重载
	func(10,20);//可以重载

【未完待续…博主持续总结中…】

【数据库】“SQLite”+“DEV-CPP”实现C/C++嵌入式编程操作数据库 正如题目所言,最近笔者需要完成一个的任务,要求使用编程语言,由于笔者用不习惯系列软件,遂选用作为开发工具,由于之前没有相关经验,踩了许多坑,特此记录SQLite+DEV-CPP实现C/C++嵌入式编程操作数据库过程。... 阅读详情

相关推荐

C/C++之cpp变exe

C/C++之cpp变exe 上节我们讲了C/C++的命名空间。 本节我们来介绍如何把源代码转换成软件。也就是标题所说的cpp变exe。 大家在使用vs等IDE的时候是不是发现很方便,只要写完源码,源码没错误的情况下,点一下生成就会得到可执行文件(exe)。 但是大家有没有想过其中的原理是怎么样的呢。所以本节通过这一点来展开做介绍。 点击生成解决方案就可以快速获得可执行文件,细心的同学可能会发现项目的Debug或者Release文件夹中,会有需多奇怪后缀的文件。例如我拿上节的方案Debug目录中的文

qq_44989173的博客 9538

在VScode下配置C/C++环境(tasks.json、launch.json、c_cpp_properties.json)

tasks.json在编译首先运行hello.c文件(点击右上角的运行图标),再点击"C/C++:gcc.exe生成和调试活动文件",如图2所示。图2 运行当前活动文件经过步骤1,在工作区code文件夹下可以生成一个文件,如下图3所示。除了tasks.json配置文件外,launch.json、c_cpp_properties.json配置文件也放在.vscode文件夹下。图3 产生的tasks.json文件tasks.json文件配置内容如下。在配置路径时只能使用\\或隔开目录。"tasks": [

m0_46610658的博客 3万+

避坑指南:MTK平台Widevine L1密钥安装全流程详解(含SP META工具使用与Log分析)

本文详细解析了MTK平台实现Widevine L1认证的全流程,涵盖密钥申请、格式转换、安全烧录等关键步骤,特别针对Trustonic TEE环境下的SP META工具使用与日志分析提供实用指南。帮助开发者规避常见错误,确保DRM密钥安全部署,满足高端内容保护需求。

weixin_27219587的博客 476

C/C++ 知识复习笔记

C/C++ 核心知识摘要

m0_63816268的博客 1953

用数据分析优化彩票决策:放弃预测,专注理性投入

彩票本质上是负和博弈的概率系统,其核心并非号码预测,而是对玩法规则、返奖率(RTP)、投入策略与心理约束的量化决策。基于组合数学与二项分布的分析方法,可精确计算各奖项概率、评估不同玩法的实际回报效率,并构建个人资金-风险-目标模型。数据的价值不在于打破随机性,而在于识别非随机环节——如奖池跃升期的RTP波动、固定奖的保底收益、冷热号背后的分奖博弈结构。这种以决策优化为导向的数据实践,适用于将彩票视为受控实验的理性参与者,而非追求玄学中奖的投机者。

frank1998819 641

微信小程序后台定位与实时位置更新的实战指南

本文提供了微信小程序实现后台定位与实时位置更新的完整实战指南。针对小程序退到后台后位置更新中断的痛点,详细解析了基于`startLocationUpdateBackground`API的后台定位解决方案。内容涵盖从隐私协议配置、项目权限声明,到授权、启动、监听、停止的核心代码流程,并分享了真机调试、性能优化及权限引导等关键避坑经验,帮助开发者构建稳定可靠的后台位置服务。

weixin_29008055的博客 467

C/C++开发环境

如同, 缺少了对cJSON的编译,这里对成员函数的所需的c/cpp文件未被编译。也就是按单文件编译方法对多文件进行编译。解决办法:在tasks.jason 中设置源文件,将"args"的值语言CC++C/C++这里的 ${fileDirname} 表示当前目录。

Watom_663的博客 3288

告别迷茫!手把手教你用Synopsys VC USB VIP搭建验证平台(附UVM分层序列实战解析)

本文详细介绍了如何使用Synopsys VC USB VIP搭建验证平台,并深入解析UVM分层序列的实战应用。通过Step-by-Step的操作指南和关键配置示例,帮助验证工程师高效集成USB VIP,掌握从环境搭建到测试用例开发的全套技能,特别适合处理复杂协议验证的挑战。

weixin_42520573的博客 552

【Cpp】C和C++混合编程

一、混合编程杂绪 1.1 为什么需要混合编程 Cpp是从C演变过来的,C有很多优秀成熟项目和库,没必要在C++中重写,C++程序可以直接调用调用 庞大项目划分后一部分适合用C(底层),一部分适合用C++(中间层、上层) 1.2 混合编程的支撑 编译型程序的编译过程:源文件->目标(库)文件->可执行程序->镜像文件 任何编程语言执行时都必须是可执行程序,所以都必须先被编译成...

baymaxly的博客 7731

ANSYS APDL实战:手把手教你搞定电磁-热耦合分析(附完整命令流)

本文通过一个工业感应加热线圈的实战案例,手把手教你使用ANSYS APDL完成电磁-热耦合分析。内容涵盖从几何建模、材料定义、网格划分到加载求解及后处理的完整流程,重点讲解了使用PLANE13单元进行双向耦合场分析的方法与命令流调试技巧,助力工程师快速掌握这一核心仿真能力。

weixin_29284201的博客 419

sam3.1 部署笔记 推理封装

sam3.1 部署笔记

jacke121的专栏 422

C/C++ 个人八股文笔记

C++学习者个人笔记

yueh0607 1211

Microsemi Libero系列教程(一)——Libero开发环境介绍、下载、安装与注册

前言 相比与Xilinx和Altera在国内的市场,Microsemi的FPGA在国内应用很少很少,网上几乎没有详细的教程,刚开始使用时,遇到了各种问题,自己也走了不少弯路。本系列教程以Libero V11.8.2.4,SmartFusion系列A2F200M3F FPGA芯片为例,将详细介绍Libero SoC软件的基本使用,及使用过程中遇到一些问题的解决方法。 Libero 简介 关于Lib...

whik1194的博客 3万+

【C/Cpp】在C中的Cpp

由于我们对Cpp的框架还不够了解,在此我这一篇章进行对Cpp语法的拆分(没错,这个Cpp的坑也算是填起来了),Cpp对于学过C的人来说好像似曾相识,两种差别并不是很多,但是为何Cpp有了如此高效的效率?Cpp对C的特征进行了一些修改,Cpp更为复杂的特性将会在后面中介绍。数据类型(datatype)定义使用存储空间(内存)的方式。通过定义数据类型,告诉编译器怎样创建一片特定的存储空间,以及怎样操纵这片存储空间。数据类型可以是内部的或抽象的。内部数据类型是编译器本来能理解的数据类型,直接与编译器关联。C和。

Mongxin_Chan的博客 1352

9篇6章7节:SEER 数据库的2025年数据变量多条件组合选择(2026年版)

软件中的病例筛选功能通过CaseSelection界面实现精准研究队列构建。该界面允许用户通过变量选择(Variable)、运算符定义(Operator)和取值设定(Values)三步操作创建筛选条件,支持种族、分期等关键变量的多条件组合。

MD Code 1454

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

如何在VSCode上运行C/C++代码

本文介绍如何在VSCode上运行C/C++代码

诸神缄默不语的博客 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【C/C++】C/C++基础知识

C/C++基础知识,包括输入输出方法、字符串长度求法、结构体数组排序等。

zhousanguhe的博客 851

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C/C++基础知识

3.signed char:有符号char(-128~127)2.unsigned char:无符号char(0~255)3.动态分配内存(malloc和new)1.静态分配,编译时在栈上分配好内存。4.自动分配,在局部函数中。1.char:标准类型。

m0_67582670的博客 3056

C/C++ 技术面试基础知识总结

???? Github    |    ???? Docsify 简体中文    |    English ???? 关于 ???? 本仓库是面向 C/C++ 技术方向校招求职者、初学者的基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。 ???? 侧边目录支持方式:???? Docsify 文档、Github + TOC 导航(TOC预览.png) ???? 保存为 PDF 方式:使用 Chrome 浏览器打开 ???? Docsify

ccf19881030的专栏 2194

(个人笔记)C/C++基础知识(一)

文章目录1.注释习惯2.常量是什么3.标志符的命名规则4.数据类型4.1整型4.2实型(浮点型)4.3字符型4.4转义字符4.5字符串型4.6布尔类型5.运算符5.1% 取模运算(取余)5.2 / 除5.3 三目运算符6. 程序流结构6.1 switch6.2 do~while7.跳转语句7.1 break7.2 continue7.3 goto 1.注释习惯 “// ” 一般用于解释单句代码,放于代码开头 /* ** 一般用于解释一段代码的作用 */ 2.常量是什么

星星泡饭zZ的博客 397

vscode搭建C/C++环境

在vscode中配置C/C++环境,教程包括从软件下载安装到配置环境的所有步骤。

TENET123的博客 2699

C/C++(三)C/C++内存管理

本文章介绍了C/C++的底层内存管理机制

m0_73682725的博客 4万+

[原创]C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件

  C/C++语言中,如何在main.cpp中调用另一个.c文件主要有5种思路:   1、在VS2012 IDE中,将被引用的.c文件后缀名全部修改为.h,然后通过IDE的解决方案资源管理器中鼠标右键单击“头文件”-"添加"-“现有项”,选中修改后缀名后的.h文件-"添加",将待引用的文件添加到工程中。   添加到“头文件”而不是“源文件”的作用:主要是使头文件的项类型属性为“C/C++ 标头”...

weixin_33834628的博客 2971

C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件

C/C++语言中,如何在main.cpp中调用另一个.c文件主要有5种思路:   1、在VS2012 IDE中,将被引用的.c文件后缀名全部修改为.h,然后通过IDE的解决方案资源管理器中鼠标右键单击“头文件”-"添加"-“现有项”,选中修改后缀名后的.h文件-"添加",将待引用的文件添加到工程中。   添加到“头文件”而不是“源文件”的作用:主要是使头文件的项类型属性为“C/C++ 标头”,而不是“C/C++ 编译器”。后者是将该文件独立编译成目标文件*.obj。用户可右键单击某个.h文件-属性-

云海唯C的专栏 1万+

c/cpp学习笔记

List有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector是不成立的。(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容。在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容。类在设计时,可以把属性和行为放在不同的权限下,加以控制。

qq_53840090的博客 1214

【C->Cpp】深度过渡由C迈向Cpp(1)

Cpp入门,由C迈向Cpp,Cpp内定义命名空间的原理

石墨博客 2011
上一篇: 【个人笔记】linux命令行快捷键【一】
下一篇: (个人笔记)C++类与对象【封装】
芯芯泡饭
博客等级 码龄7年 48粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值