#include<iostream>
using namespace std;
int main()
{
cout << "Hello World" << endl;
system("pause");
return 0;
}
在控制台中 输出 Hello world
变量的作用: 给一段指定的内存空间起名,方便反操作这段内存
方便我们管理内存空间
在内存中 我们有一个变量 10 , 他的内存编号是十六进制的
例如: 0x0000 => 10 那我们要找这个内存 数据量一大 就比较麻烦了 都是16进制数
所以 我们起了个a 来作为变量名(方便管理内存空间)
常量: 用于记录程序中不可更改的数据
c++有两种方式
#define 宏常量 在文件上方定义表示一个常量
const所修饰的变量 在变量前+const 不可更改
#define day 7 //在头文件那边
coust int a = 10; //这个也不可修改 也会报错
数据类型: 整型
short 短整型 占用2字节
int 整型 4字节
long 长整型 Windows为 4字节 , linux为4字节(32位操作系统),8字节(64位操作系统)
long long 长长整型 8字节
数据类型 浮点型
float 单精度浮点数 4字节
double 双精度浮点数 8字节
如果只写 float a = 3.14;
那这样 这个3.14这边是 double 类型的, 之后程序之后会进行一个转换,会把3.14转换成float
多了一个数据转换的过程
//科学计数法
float f1 = 3e2;//e的后面是一个正数 代表了 3* 10的2次方 代表300
float f2 = 3e-2;//e的后面是一个负数 代表了 3* 0.1的2次方 代表0.03
数据类型 字符
char ch = 'a';
只能写1个字符
c和c++中 字符变量只占一个字节
字符型变量并不是把字符本身放到内存中存储,而是将对应的ascll编码放入到存储单元
数据类型 字符串
char a[] = "123123";//c语言风格的字符串
string a = "bbb";//c++语言风格的字符串
#include<string>;//在使用c++风格的字符串的时候 要引用头文件
数据类型: bool 布尔
bool类型占 1个字节大小
sizeof 求出 数据类型占用内存大小
sizeof(数据类型/变量)
转义字符:不能显示出来的ASCll字符
数据的输入 cin 关键字
cin>>a 将控制台输入的 数字 赋值给a
数组:就是一个集合 里面存放了 相同的数据类型
数组是由连续的内存位置组成的;
一维数组
可以统计整个数组在内存中的长度
可以获取数组在内存中的首地址
&取地址符号
二维数组 矩阵数组
int a[4][5] ;
为4 行 5 列的 二维矩阵数组
函数的定义
返回值类型 函数名 (参数列表){
函数体
return 表达式:
}
函数必须写在Main方法后面 要嘛就必须得声明函数 让编译器知道你有这个 函数的名称 以及如何调用函数
函数的分文件写法:
创建.h 后缀名的头文件
创建.cpp后缀名的源文件
在头文件中写函数的声明
在源文件中写函数的定义
这是在c++中写的顺序
我们在 .h 头文件声明的 那个方法 ,得有
#include<iostream>
using namespace std;
这两行
之后在你的 源文件那边 需要 引用你的 头文件
之后在我们Main方法那边 需要引用 头文件
指针
可以通过指针间接访问内存
内存编号都是从0开始记录的 用16进制数来表示
可以利用指针变量保存地址
int a= 10 ; 内存中是 10这个数据, 用a来找 编号0x0001;
我用一个 p 来存储 0x0001 这个地址 那这个 p 就是指针
用p这个指针来记录了 a的地址
int * p = &a;
如何使用指针
通过解引用的方式来找到指针指向的内存
指针前 加一个 * 号 ,代表解引用,代表你找到了 p指针存储在内存中的数据
*p
我们把 *p 改为1000 *p = 1000;
那内存中的地址中的数据也一样发生改变 a的数据也是1000;
指针也是一种数据类型 是指针变量
指针变量占的内存空间是多少?
在 32位操作系统下 都是 占用4个字节空间
在64位操作系统下 占用8个字节空间
空指针和 野指针
空指针: 指针变量指向内存中编号为0的空间
用途:初始化指针变量
//空指针
// 空指针用于给指针变量进行初始化
注意:空指针指向的内存是不可以访问的 ;
0~255 之间的内存编号是系统占用的 不允许更改,访问
int* p = NULL; //这个就是空指针的写法
这就是野指针,这种问题 不会被编译器所发现 编译会通过 但是会报错启动后
(读取访问权限异常)
在程序中要避免出现这种野指针
int* p = (int *) 0x1100;
cout << *p << endl;
0x1100 并没有什么开辟内存 你直接指向 就会有问题
const 修饰指针
const 修饰指针 ----常量指针
const 修饰常量 ----指针常量
const 既修饰指针, 又修饰常量
const 常量指针: \
就是在指针前面加 const
const int * p =&a;
当他是常量指针的时候 指针的指向的地址 可以修改 , 但是 指针指向的值不可以修改
const int * p = &a;
*p = 20 ; //错误
*p = &b ; //正确
指针常量
int * const p = &a; //这就是 指针常量 在const后面的是 常量 那就是 指针常量
指针的指向 不可以改 但是 指向的值可以更改
*p = 20 ; //正确
*p = &b ; //错误
const 既修饰了指针 又修饰常量
const int * const p = &a;那就两个都不可以修改
*p = 20 ; //错误
*p = &b ; //错误
指针与数组
//利用指针访问数组中的元素
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* p = arr;//arr 就是 数组的首地址
cout << "第一个数据-------" << *p;
for (int i = 0; i < 10; i++)
{
cout << "第" << i+1 << "个数据是=" << *p<<endl;
p++;
}
p++;//指针像后偏移四个字节 ;
指针与函数
作用 利用指针作函数的参数 可以 修改 实参的值
其实就是 地址 传递 就是根据你传入的那个地址,利用内存地址 来 操作 那个 数据
最后 你外部的 那个被取地址的数据 如果在内部有改变 你外部也会发生改变 ;
void GetSum(int *a, int *b,int *c)
{
*c = *a + *b;
}
void Main()
{
int a = 10 ;
int b = 20 ;
int c = 0 ;
GetSum(&a,&b,&c);
}
根据上面的方法 最后输出的 c 就是 30 ;
结构体
结构体属于用户自定义的数据类型,允许用户存储不同的数据类型
struct 结构体名 {};
实例化结构体的 三种方法
struct Student s1;
struct Student s1={变量1,变量2,变量3}// 必须一一对应
还有一个就是在 创建结构体的时候在后面直接创建
struct 结构体名 {}s1;
在创建结构体不可以省略 struct
在调用创建的时候可以省略 struct
结构体数组
struct 结构体名 数组名[个数] = {{} , {} , {} };
结构体指针
//创建结构体变量
Student s1 = {"结构体",18,100};
//通过 指针p 取得 结构体的地址
Student* p = &s1;
//通过 -> 来获得结构体中的属性
p->age;
如果要获得 指针指向的结构体的数据 那就需要 用 ->来获得他的数据
结构体嵌套结构体
1:
Student s1 = {"",18,100};
Teacher teacher = { 1,18,"老师",s1 };
2:
Teacher t1;
t1.age = 1;
t1.id = 2;
t1.name = 3;
t1.stu.age = 18; t1.stu.name = "学生"; t1.stu.score = 100;
两种方法都可以
在第二个方法中 必须在结构体中 创建 Student这个 结构体的时候 要加上 struct
在结构体中 const的使用场景
在 函数中 void Prist(const student * stu)
{
}
这样就不会在函数中修改这个结构体 ,如果要修改 就不要加const
防止误操作
将函数中的形参改为指针,可以减少内存空间 而且不会有多余的副本产生
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg