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

目录

  • 一、数据类型的介绍
  • 二、数据的变量和常量
  • 三、变量的作用域和生命周期
  • 四、字符串
  • 五、转义字符
  • 六、操作符
  • 六、常见的关键字
    • 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的形式进行打印

内置的数据类型,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; // 十六进制数字,等价于十进制的 26int hex2 = 0xabc; // 十六进制数字,等价于十进制的 2748int 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.mzph.cn/pingmian/5736.shtml

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

相关文章

中间件之异步通讯组件RabbitMQ入门

一、概述 微服务一旦拆分&#xff0c;必然涉及到服务之间的相互调用&#xff0c;目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中&#xff0c;调用者发起请求后需要等待服务提供者执行业务返回结果后&#xff0c;才能继续执行后面的业务。也就是说调用者在调用…

Java IO流(二)

1. 缓冲流 1.1 字节缓冲流概述 当对文件或其他数据源进行频繁的读/写操作时&#xff0c;效率比较低&#xff0c;这时如果使用缓存流就能够更高效地读/写信息。 比如&#xff0c;可以使用缓冲输出流来一次性批量写出若干数据减少写出次数来提高写出效率。 如果用生活中的例子做…

使用qemu调试NVME driver

参考nvme驱动相关的博客&#xff0c;可以使用qemu buildroot进行nvme驱动的流程debug。 一、QEMU编译 首先需要编译qemu&#xff0c;可以参考QEMU编译。wget下载最新版本的QEMU&#xff0c;编译之前&#xff0c;最好检查下依赖包是否安装&#xff0c;避免安装过程出现各种错…

Qwen-Audio:推动通用音频理解的统一大规模音频-语言模型(开源)

随着人工智能技术的不断进步&#xff0c;音频语言模型&#xff08;Audio-Language Models&#xff09;在人机交互领域变得越来越重要。然而&#xff0c;由于缺乏能够处理多样化音频类型和任务的预训练模型&#xff0c;该领域的进展受到了限制。为了克服这一挑战&#xff0c;研究…

【WebGL】修改阴影体形状,实现相交分析

阴影体&#xff08;Shadow Volume&#xff09;技术是计算机图形学中实现阴影的重要方式&#xff0c;除了用于可视化阴影效果外&#xff0c;阴影体还能实现线、面等要素的贴地、贴对象显示。在用阴影体贴地、贴对象时&#xff0c;大多数情况下我们都会认为阴影体是一个带有高度的…

OpenCV的图像矩(64)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV如何为等值线创建边界旋转框和椭圆(63) 下一篇 &#xff1a;OpenCV4.9的点多边形测试(65) Image Moments&#xff08;图像矩&#xff09;是 OpenCV 库中的一个功能&#xff0c;它可…

神经网络中常见的激活函数:理解与实践

神经网络中常见的激活函数&#xff1a;理解与实践 在神经网络中&#xff0c;激活函数是一个非常重要的组成部分&#xff0c;它为神经元引入了非线性特性&#xff0c;使得神经网络可以拟合各种复杂的函数关系。本文将介绍9种常见的激活函数&#xff0c;包括它们的概述、公式以及…

MATLAB 数据导入

MATLAB 数据导入&#xff08;ImportData&#xff09; 在MATLAB中导入数据意味着从外部文件加载数据。该importdata功能允许加载不同格式的各种数据文件。它具有以下五种形式 序号 功能说明 1 A importdata(filename) 从filename表示的文件中将数据加载到数组A中。 2 A i…

附录3-小程序常用事件

目录 1 点击事件 tap 2 文本框输入事件 input 3 状态改变事件 change 4 下拉刷新事件 onPullDownRefresh() 5 上拉触底事件 onReachBottom() 1 点击事件 tap 2 文本框输入事件 input 可以使用 e.detail.value 打印出当前文本框的值 我现在在文本框中依次输入12345&…

区块链 | IPFS 工作原理入门

&#x1f98a;原文&#xff1a;What is the InterPlanetary File System (IPFS), and how does it work? &#x1f98a;写在前面&#xff1a;本文属于搬运博客&#xff0c;自己留存学习。 1 去中心化互联网 尽管万维网是一个全球性的网络&#xff0c;但在数据存储方面&#…

帕金森患者应该怎么注意生活方式?

在面对帕金森病的挑战时&#xff0c;科学合理地改善日常生活方式&#xff0c;不仅能帮助患者更好地管理病情&#xff0c;还能提升生活质量。今天&#xff0c;让我们一起探索如何通过简单的日常调整&#xff0c;为患有帕金森病的朋友们带来积极的变化。 饮食调整&#xff1a;营养…

【Mac】Photoshop 2024 for mac最新安装教程

软件介绍 Photoshop 2024是Adobe公司推出的一款图像处理软件&#xff0c;它支持Windows和Mac OS系统。Adobe Photoshop是业界领先的图像编辑和处理软件之一&#xff0c;广泛用于设计、摄影、数字绘画等领域。 Photoshop 2024的功能包括&#xff1a; 1.图像编辑&#xff1a;提…

MinIO学习(1) - 概览,安装

简介 MinIO 是一个高性能的分布式对象存储系统。 它是软件定义的&#xff0c;在行业标准硬件上运行&#xff0c;并且 100% 开源&#xff0c;主要许可证是 GNU AGPL v3。 MinIO 的不同之处在于它从一开始就被设计为私有/混合云对象存储的标准。 因为 MinIO 是专门为对象而构建…

【华为】华为防火墙双机热备

【华为】华为防火墙双机热备 实验需求实验拓扑配置FW5-M前骤单臂路由和VRRP划分防火墙基本区域部署HRP&#xff08;华为心跳协议&#xff09; FW6-B前骤单臂路由和VRRP划分防火墙基本区域部署HRP&#xff08;华为心跳协议&#xff09; LSW2PC NATSNAT &#xff1a;Easy IPDNAT&…

Linux进程管理与监控

一、相关概念 1、进程的的基本定义 在自身的虚拟地址空间运行的一个独立的程序&#xff0c;从操作系统的角度来看&#xff0c;所有在系统上运行的东西&#xff0c;都可以称为一个进程。 2、进程的分类 系统进程&#xff1a;可以执行内存资源分配和进程切换等管理工作&am…

spring boot 自定义starter示例

springboot 约定规范 Starter项目的命名规范 建议自定义的starter 以 xxx-spring-boot-starter 命名&#xff0c;官方的Starter一般都是以spring-boot-starter-为前缀。这样做的目的是为了避免与官方或其他第三方提供的Starter产生冲突或混淆。 Starter项目的结构规范(重要) …

CentOS/Anolis的Linux系统如何通过VNC登录远程桌面?

综述 需要在server端启动vncserver&#xff0c;推荐tigervnc的server 然后再本地点来启动client进行访问&#xff0c;访问方式是IPport&#xff08;本质是传递数据包到某个ip的某个port&#xff09; 然后需要防火墙开启端口 服务器上&#xff1a;安装和启动服务 安装服务 y…

【1小时掌握速通深度学习面试1】卷积神经网络-上

目录 1.简述卷积的基本操作&#xff0c;并分析其与全连接层的区别 2.在卷积神经网络中&#xff0c;如何计算各层的感受野大小?卷积层的输出尺寸、参数量和计算量。 3.简述分组卷积及其应用场景 4.简述空洞卷积的设计思路 5.简述转置卷积的主要思想以及应用场景 1.简述卷积…

Mac数据恢复软件快速比较:适用于Macbook的10佳恢复软件

数据丢失导致无数个人和组织每天损失大量资金。更糟糕的是&#xff0c;某些文件具有货币价值和情感意义&#xff0c;使它们不可替代&#xff0c;并使数据恢复成为唯一可行的选择。最好的消息是Mac用户可以从各种数据恢复程序中进行选择。为了帮助您尽可能快速、轻松地恢复丢失的…

54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接

54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接 import socket from ohos.net.socket; import process from ohos.process; import wifiManager from ohos.wifiManager;import common from ohos.app.ability.common;let tcp socket.constructTCPSocketInstance();…