C语言-整体内容简单的认识

news2024/12/24 20:25:40

目录

  • 一、数据类型的介绍
  • 二、数据的变量和常量
  • 三、变量的作用域和生命周期
  • 四、字符串
  • 五、转义字符
  • 六、操作符
  • 六、常见的关键字
    • 6.1 关键字static
  • 七、内存分配
  • 八、结构体
  • 九、指针

一、数据类型的介绍

  sizeof是一个操作符,是计算机类型/变量所占内存空间的大小
  scanf函数返回的是读取到数据的个数,如果scanf函数读取失败会返回EOF(EOF end of file 文件结束标志,#define EOF -1)
  多组输入:while(scanf(“%d”,&q)==1) 如果读取到一个数就持续输入,否则返回EOF
  scanf函数每次读取一个字符,跳过所有的空白字符,直到遇到第一个非空白字符的时候才开始读取。并且在读取到第一个空白字符后结束读取,将空白字符之后的所有字符都暂存在缓冲区中。除非缓冲区被刷新( fflush(stdout) )或者字符被读取走,否则将一直停留在缓冲区中。
  多组输入读一个字符通常用getchar()。如果读取到一个字符就返回该字符的ASCII码值,否则返回EOF。(while(ch=getchar())!=EOF)
  处理缓冲区的\n的问题也通常使用getchar()函数来处理。 (getchar(); 处理\n)

  %d—是以十进制的形式打印一个整数
  %c—以字符的形式进行打印
  %s—以字符串的形式进行打印
  %f—以float的形式进行打印
  %lf—以double的形式进行打印
  %ld—以long的形式进行打印
  %lld—以long long的形式进行打印
  %p—以地址的形式进行打印,是以16进制的形式表示地址的
  %zd—以size_t的形式进行打印
  %u—以无符号整型的形式进行打印
  %x—以十六进制无符号整型的形式进行打印

内置的数据类型,C语言本身就具有的类型。(char,short,int,long,long long,float,double等)
自定义类型,允许你创建出来的类型。(结构体类型等)

整型(int)表示的最大最小整数值是(2147483647)和(-212147483647-1)

1字节(byte)等于8个bit位(bite)
一个汉字占两个字节
1KB等于1024个字节

在这里插入图片描述

55.5小数直接写出来,编译器默认是double类型的
55.5f 这个时候是float类型

二、数据的变量和常量

在这里插入图片描述

首先原则上我们的变量名尽量不要冲突
但是当全局变量和局部变量的名字冲突的情况下, 局部优先的

三、变量的作用域和生命周期

作用域:
1.局部变量的作用域是变量所在的局部范围
2.全局变量的作用域是整个工程
生命周期:
1.局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束
2.全局变量的生命周期是:整个程序的生命周期

全局变量未初始化的话默认为0,局部变量未初始化的话默认为随机值(可能会出现编译错误)

extern 用于声明外部符号

在这里插入图片描述

四、字符串

在这里插入图片描述
  \0是字符串的结束标志
  printf 以%s打印字符串的时候,就要从你给的地址开始打印,一直打印遇到\0,停止。
  printf的返回值是屏幕上打印字符的个数,包括\0的个数
  printf(“%02d”) 表示以十进制整型方式打印,保留两位数,不够用0补齐
  printf(“%.2d”)
  printf(“%02d”)

在这里插入图片描述
在这里插入图片描述

strlen是库函数,用来求字符串长度的,就是从给定的地址,向后数字符,直到遇到\0,结束,\0不统计在内。
统计ch1的字符长度是随机值,因为不知道字符串后面的\0的位置。ch2则是以\0为结尾的字符串。

sizeof和strlen的对比
1.sizeof是操作符,strlen是库函数
2.sizeof计算的占有内存的大小,单位是字节,不关注内存中存放的具体数据
strlen是求字符串长度的,只能针对字符串,统计的是字符串中\0之前出现的字符的个数

五、转义字符

转义字符释义
\?在书写连续多个问号时使用,防止他们被解析成三字母词
\’用于表示字符常量’
\‘’用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的数字。如:\130 表示字符X
\xdddd表示2个十六进制数字。如:\x30 表示字符0

ASCII表
在这里插入图片描述
8进制的130,转换成10进制后得到88,把88作为ACSII值代码的字符就是X
16进制的30,转换成10进制后得到48,把48作为ASCII值代码的字符就是0

int main() {
    int hex1 = 0x1A; // 十六进制数字,等价于十进制的 26
    int hex2 = 0xabc; // 十六进制数字,等价于十进制的 2748
    int octal = 0123; // 八进制数字,等价于十进制的 83
}

六、操作符

算数操作符
+   -   *   /(1.计算的结果是整除之后得到的商。2.除法有整数除法和浮点数除法(保证除数和被除数中至少有一个数是浮点数))   %(取模操作符(取余)得到的是余数,只适用于整数)

移位操作符
>>   <<

位操作符
&   ^   |

赋值操作符
=   +=   -=   *=   /=   &=   |=   >>=   <<=

单目操作符
!    逻辑反操作
-    负值
+    正值
&    取地址
sizeof   操作数的类型长度(以字节为单位)
~    对一个数的二进制按位取反
- -     前置、后置- -
+ +    前置、后置+ +
*      间接访问操作符(解引用操作符)
(类型)   强制类型转换

关系操作符
>     用于测试“大于”
>=    用于测试“大于等于”
<    用于测试“小于”
<=    用于测试“小于等于”
!=    用于测试“不相等”
==    用于测试“相等”

逻辑操作符
&&    ^  逻辑与
||    ^  逻辑或

条件操作符
exp1 ? exp2 : exp3      epx1的结果为真则输出exp2的结果,否则输出exp3的结果

逗号操作符
exp1, exp2, exp3, …expN      结果为逗号的最后一个表达式的结果(但是需要计算前面逗号的表达式,可能会影响最后表达式的值)

下标引用、函数调用和结构成员
[]      下标引用
()      函数调用
.      结构成员访问
->      结构成员访问

六、常见的关键字

关键字名称作用
asm表示与大括号一起使用时,大括号之间的每一行都是一条汇编语句。不与大括号一起使用,放在代码行首部,则表示其余部分是一条汇编语句
auto表示根据初始值自动推断变量的数据类型,不是每个编译器都支持auto
break表示跳出循环,当程序执行到break语句时,会立即退出当前的循环,并继续执行循环后面的代码
case表示case关键字用于在switch语句中标识不同的情况。每个case标签后面跟着一个常量表达式,用于与switch语句中的表达式值进行比较
catch表示用于异常处理,try执行try块的起始,try块后的catch可以捕获异常,异常由throw抛出。throw在函数中还表示动态异常规范
class表示一般的类声明
const表示类型修饰符,用于变量或函数参数声明,表示只读类型(指定类型安全性,保护对象不被意外修改)
const_cast表示取消常量属性,可以用来将一个常量指针或引用转换成一个非常量的指针或引用,同时保持它们指向原来的对象
decltype表示与auto关键字类似,用于编译时类型推导,但是并不像auto从变量声明的初始化表达式获得变量的类型,而总是以一个普通表达式作为参数,返回该表达式的类型
default1.表示在switch语句中用于指定当表达式的值与所有case标签都不匹配时应该执行的代码块。2.在C++11标准中通过参数列表后面写上=default来要求编译器生成默认构造函数
delete表示属于操作符,可以被重载。new表示向内存申请一段新的空间,申请失败会抛出异常。new会调用operator new函数,再在operator new函数里调用malloc函数分配空间,然后再调用构造函数。delete不仅会清理资源,还会释放空间。delete会调用析构函数,其次调用operator delete函数,最后在operator delete函数里面调用free函数。malloc申请内存失败后会返回空。free只是清理了资源,没有释放空间
do表示与while配合使用,先执行do后面的代码,然后再判断while后面括号里的值,如果为真,循环开始,否则,循环不开始
dynamic_cast表示父类的指针或引用转换为子类的指针或引用
explicit表示避免自定义类型的强制类型转换
export表示使用该关键字可实现模板函数的外部调用。对模板类型,可以在头文件中声明模板类和模板函数。在代码文件中,使用关键字export来定义具体的模板类对象和模板函数,然后在其他用户代码文件中,包含声明头文件后,就可以使用这些对象和函数了
extrern表示当修饰变量或函数时,表示其具有外部链接属性,即其既可以在本模板中使用也可以在其他模板中使用
final表示final修饰虚函数,表明子类不能重写虚函数
friend表示友元,使其不受访问权限控制的限制。例如在一个类中,私有变量外部是不能直接访问的,假如另外一个类或函数要访问本类的一个私有变量时,可以把这个函数或类声明为本类的友元函数或友元类,这样他们就可以直接访问本类的私有变量
inline表示内联函数,在编译时将所调用的函数代码直接嵌入到主调用函数中。各个编译器的实现方式可能不同
mutable表示突破const的研制,mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中
namespace表示C++标准程序库中的所有标识符都被定义于一个名为std的namespace中,命名空间除了系统定义的名字空间之外,还可以自己定义,定义命名空间关键字“namespace”,使用命名空间时用符号“::”指定
new表示属于操作符,可以被重载。new表示向内存申请一段新的空间,申请失败会抛出异常。new会调用operator new函数,再在operator new函数里调用malloc函数分配空间,然后再调用构造函数。delete不仅会清理资源,还会释放空间。delete会调用析构函数,其次调用operator delete函数,最后在operator delete函数里面调用free函数。malloc申请内存失败后会返回空。free只是清理了资源,没有释放空间
noexcept表示告诉编译器该函数不会抛出异常,或者该函数可能会抛出异常
operator表示和操作符连用,指定一个重载了的操作符函数。比如:operator+
override表示检查基类虚函数的重写,没有重写会编译错误
protected表示保护的,只能在本类和友元中访问
private表示私有的,只能在本类,派生类和友元中访问
public表示公有的,访问不受限制
reinterpret_cast表示允许任意指针类型之间的转换,任意整型类型和任意指针类型的转换
register表示提示编译器尽可能的把变量存入到CPU内部寄存器中
static表示可修饰变量(静态全局变量,静态局部变量),也可以修饰函数和类中的成员函数。static修饰的变量的周期为整个函数的生命周期。具有静态生存期的变量,只有在函数第一次调用时,进行初始化,在没有显示初始化的情况下,系统把他们初始化为0
static_cast表示用于相近类型的转换,如:int换double
switch表示switch语句包含了一个表达式和多个case标签。首先计算expression的值,然后将其与每个case标签的常量进行比较,如果找到匹配的case标签,将执行相应的代码块,直到遇到break语句或者switch语句结束
template表示声明一个模板,模板函数,模板类,模板的特化
this表示this是个特殊的指针,存放的是当前对象的首地址,在调用成员的时候,编译器会用this来调用成员。哪个对象调用成员函数,this指针就指向哪个对象
throw表示用于异常处理,try执行try块的起始,try块后的catch可以捕获异常,异常由throw抛出。throw在函数中还表示动态异常规范
try表示用于异常处理,try执行try块的起始,try块后的catch可以捕获异常,异常由throw抛出。throw在函数中还表示动态异常规范
typedef表示为现有数据类型创建一个新的名字,便于程序的阅读和编写
typeid表示运行时获取变量类型名称,可以使用typeid(变量).name()
typename表示告诉编译器把一个特殊的名字解释为一个类型。比如:typedef int bar :bar 也是类型名,是类型int的别名
unsigned表示无符号数
using表示1.在当前文件引入命名空间using namespace std;2.在子类中使用,using声明引入基类成员名称
virtual表示声明虚基类,虚函数。虚函数=0时,则为纯虚函数,纯虚函数所在的类称为抽象类
volatile表示指定被修饰的对象类型的读操作是副作用(读取不能随便优化合并,适合映射I/O寄存器。1.当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中,以后再取变量值时,就直接从寄存器中取值。2.优化器在用到volatile变量时必须每次都小心地重新读取这个变量的值,而不是使用保存到寄存器的备份。3.volatile适用于多线程应用中被几个任务共享的变量)
wchar_t表示宽字符型,表示多字节字符

6.1 关键字static

  1.修饰局部变量——称为静态局部变量
  static修饰局部变量的时候,本来一个局部变量是存放在栈区的,如果被static修饰就存储到静态区了。static修饰局部变量改变了变量的存储类型(位置),使得这个静态变量的生命周期变长了,直到程序结束才结束,但是作用域不变(不能在其他文件使用)。
  2.修饰全局变量——称为静态全局变量
  static修饰全局变量,改变了这个全局变量的链接属性,由外部链接属性变成了内部链接属性,这个静态变量只能在自己所在的源文件内部使用,不能在其他源文件内部使用了。感觉像是作用域变小了。
  3.修饰函数——称为静态函数
  static修饰函数和static修饰全局变量是一样的。函数是具有外部链接属性的,但是被static修饰,就变成了内部链接属性,使得这个函数只能在自己所在的源文件内部使用,不能在其他文件内部使用。
  外部进行声明函数是只需要加函数参数的类型就行了,参数加不加都行。如:extern int Add(int x, int y) 其中:x,y可写可不写
  宏和函数比较类似,定义宏则为#define Add(x,y) ((x)+(y))

七、内存分配

C/C++代码学习的时候,我们把内存大概分为3个区域:
栈区:局部变量,形式参数,临时作用的变量都在栈区。栈区上变量的特点:进入作用域创建,出了作用域销毁(还给操作系统)
静态区:动态内存分配,malloc,calloc,realloc,free
堆区:全局变量,静态变量。静态区的变量特点:创建好后,直到程序结束才销毁(还给操作系统)

八、结构体

  定义以下结构体:

struct Stu
{
	char name[20];//名字
	int age; //年龄
	char sex[5]; //性别
	char id[15]//学号
};

结构体的初始化:

//打印结构体信息
	struct Stu s = {"张三"20"男""20180101"};
//.为结构成员访问操作符 (结构体变量.成员)
	printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符 (结构体指针变量->成员)
	struct Stu *ps = &s;
	printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);

结构体变量.成员
结构体指针->成员

九、指针

指针变量是用来存放地址的
32位机器上:地址是32个二进制位,这个地址要存储的话要4个字节,所以在32位机器上,指针变量的大小是4个字节。
64位机器上:地址是64个二进制位,这个地址要存储的话要8个字节,所以在64位机器上,指针变量的大小是8个字节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1643643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AEC Capital Limited:开启可持续金融新纪元

在当今社会&#xff0c;环保和可持续发展已成为全球关注的焦点。在这个背景下&#xff0c;AEC Capital Limited作为香港的一家金融服务公司&#xff0c;以其专业、高端的服务和创新的理念&#xff0c;成为可持续金融领域的引领者。我们致力于将环境保护与金融服务相结合&#x…

设计模式之拦截过滤器模式

想象一下&#xff0c;在你的Java应用里&#xff0c;每个请求就像一场冒险旅程&#xff0c;途中需要经过层层安检和特殊处理。这时候&#xff0c;拦截过滤器模式就化身为你最可靠的特工团队&#xff0c;悄无声息地为每一个请求保驾护航&#xff0c;确保它们安全、高效地到达目的…

触动精灵纯本地离线文字识别插件

目的 触动精灵是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。但触动精灵的图色功能比较单一&#xff0c;无法识别屏幕上的图像&#xff0c;根据图像的变化自动执行相应的操作。本篇文章主要讲解…

C语言二分查找的区间问题

概念 什么是二分查找呢&#xff1f; 二分查找&#xff1a;在有序数组中查找某一特定元素的搜索算法。 二分查找又称折半查找&#xff0c;通过将数组折半&#xff0c;用中间值和查找值作比较&#xff0c;多次使用&#xff0c;直到找到要查找的值。 注意:二分查找的前提是&#…

内核workqueue框架

workqueue驱动的底半部实现方式之一就是工作队列&#xff0c;作为内核的标准模块&#xff0c;它的使用接口也非常简单&#xff0c;schedule_work或者指定派生到哪个cpu的schedule_work_on。 还有部分场景会使用自定义的workqueue&#xff0c;这种情况会直接调用queue_work和qu…

JavaScript的操作符运算符

前言&#xff1a; JavaScript的运算符与C/C一致 算数运算符&#xff1a; 算数运算符说明加-减*乘%除/取余 递增递减运算符&#xff1a; 运算符说明递增1-- 递减1 补充&#xff1a; 令a1&#xff0c;b1 运算a b ab12ab22ab--10a--b00 比较(关系)运算符&#xff1a; 运算…

服务器端集群优化-集群还是主从

7、服务器端集群优化-集群还是主从 集群虽然具备高可用特性&#xff0c;能实现自动故障恢复&#xff0c;但是如果使用不当&#xff0c;也会存在一些问题&#xff1a; 集群完整性问题集群带宽问题数据倾斜问题客户端性能问题命令的集群兼容性问题lua和事务问题 问题1、在Redi…

[Spring Cloud] (6)gateway整体加解密

文章目录 简述整体效果后端增加配置nacos增加配置GlobalConfig 添加请求整体解密拦截器DecryptionFilter添加响应整体解密拦截器EncryptionFilter 前端请求拦截器添加整体加密逻辑请求头中添加sessionId 响应拦截器添加整体解密逻辑 简述 本文网关gateway&#xff0c;微服务&a…

VsCode插件 -- Power Mode

一、安装插件 1. 首先在扩展市场里搜索 Power Mode 插件&#xff0c;如下图 二、配置插件 设置 点击小齿轮 打上勾 就可以了 第二种设置方法 1. 安装完成之后&#xff0c;使用快捷键 Ctrl Shift P 打开命令面板&#xff0c;在命令行中输入 settings.json &#xff0c; 选择首…

扩展学习|结合故事的力量和数字的力量:混合方法研究和混合研究综述

文献来源&#xff1a;Pluye, Pierre, and Quan Nha Hong. "Combining the power of stories and the power of numbers: mixed methods research and mixed studies reviews." Annual review of public health 35 (2014): 29-45. 文献获取&#xff1a;链接&#xff1…

【机器视觉】yolo-world-opencvsharp-.net4.8 C# 窗体应用程序

这段代码是基于 OpenCvSharp, OpenVinoSharp 和 .NET Framework 4.8 的 Windows Forms 应用程序。其主要目的是加载和编译机器学习模型&#xff0c;对输入数据进行推理&#xff0c;并显示结果。 下面是该程序的主要功能和方法的详细总结&#xff1a; 初始化 OpenVINO 运行时核心…

【微服务】配置管理

Nacos配置管理 配置管理配置共享配置热更新 配置管理 将微服务集群中常用&#xff0c;经常变化的配置都写到一个独立的配置文件微服务中进行统一管理 配置共享 在Nacos的界面当中进行配置管理&#xff0c;在配置列表中添加配置 比如各个服务中的jdbc的连接配置&#xff1a; …

【AI工具声音克隆】——OpenVoice一键部署modelScope一键使用

一、声音/音色克隆简介 声音或音色克隆的原理实现步骤主要基于深度学习技术&#xff0c;特别是语音合成和生成模型。以下是声音/音色克隆的大致实现步骤&#xff1a; 数据收集&#xff1a; 收集语音数据&#xff0c;作为模型的训练样本。数据应尽可能多样化&#xff0c;包括不…

基于stm32的USB虚拟U盘+FATFS+W25Q64

基于stm32的USB虚拟U盘FATFSW25Q64 本文目标&#xff1a;基于stm32的USB虚拟U盘FATFSW25Q64 按照本文的描述&#xff0c;简单跑通USB的MSC类来进行简单交互。 先决条件&#xff1a;拥有C语言基础&#xff0c;装有编译和集成的开发环境&#xff0c;比如&#xff1a;Keil uVis…

如果还有机会再跟芒格共度一天,巴菲特想做什么?

这是芒格因离世而缺席的第一年&#xff0c;但他的身影却无处不在。问答环节&#xff0c;巴菲特会不小心脱口而出“查理&#xff0c;该你回答了”&#xff0c;他也称&#xff0c;与芒格在一起的时间比独处要快乐。 可以说&#xff0c;虽然99岁的芒格因离世而缺席了2024年伯克希…

记录几种排序算法

十种常见排序算法可以分类两大类别&#xff1a;比较类排序和非比较类排序。 常见的快速排序、归并排序、堆排序以及冒泡排序等都属于比较类排序算法。比较类排序是通过比较来决定元素间的相对次序&#xff0c;其时间复杂度不能突破 O(nlogn)。在冒泡排序之类的排序中&…

Python基础详解一

一&#xff0c;print打印 print("hello word") print(hello word) 双引号和单引号都可以 二&#xff0c;数据类型 Python中常用的有6种值的类型 输出类型信息 print(type(11)) print(type("22")) print(type(22.2)) <class int> <class str&…

Mybatis进阶2

Mybatis进阶1-CSDN博客 Mybatis入门-CSDN博客 Mybatis入门2-CSDN博客 我们接下来要学习Mybatis的高级查询 我们先在数据库中准备我们需要的数据表 teacher表 课程表&#xff1a;与教师表是一对多的关系&#xff0c;所以有一个外键字段 学生表 由于学生表和课程表是多对多的…

鸿蒙ArkTs开发,仿抖音个人中心header 下拉放大

如果是iOS 或者android 上实现&#xff0c;可以用Scollview 的contentOffset 来实现&#xff0c;然而在鸿蒙ets中该如何实现&#xff1f;废话不多说开始撸代码 第一步、实现一个header // 创建header&#xff0c;准备一张背景图片BuilderHeaderBuilder(){Column() {Row() {Ima…

算法入门<一>:C++各种排序算法详解及示例源码

1、排序算法 排序算法&#xff08;sorting algorithm&#xff09;用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更高效地查找、分析和处理。 1.1 评价维度 运行效率&#xff1a;我们期望排序算法的时间复杂度尽量低&#xf…