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的形式进行打印,默认保留6位小数。%.nf指定保留n位小数。%mf指定输出宽度为m个字符,如果少于m个字符,则右对齐并用空格填充左侧。%e以科学计数法输出浮点数。
  %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个字节。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在做题中学习(52): 山脉数组的峰顶索引

852. 山脉数组的峰顶索引 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;二分查找 思路&#xff1a;O(logn)的时间复杂度&#xff0c;很可能是二分法&#xff0c;再看看有没有二段性&#xff1a; 由题目可以知道&#xff0c;i的左边比i小&#xff0c;右边比i大&am…

【Java基础】设计模式——单例设计模式

单例设计模式&#xff08;Singleton Design Pattern&#xff09;是一种创建型设计模式&#xff0c;它确保⼀个类有且只有⼀个实例&#xff0c;并提供一个全局访问点来访问这个唯一实例。 单例模式主要解决的是&#xff0c;⼀个全局使⽤的类频繁的创建和消费&#xff0c;从⽽提…

2-6 任务 猜数小游戏(单次版)

本任务要求编写一个猜数小游戏&#xff08;单次版&#xff09;&#xff0c;游戏规则是计算机产生一个0到100之间的随机整数&#xff0c;用户通过输入猜测的数字进行猜测&#xff0c;根据猜测情况给出提示&#xff0c;直到猜对为止。编程思路是利用while循环和多分支结构实现永真…

python代码无法点击进入,如何破???

python代码无法点击进入&#xff0c;如何破&#xff1f;&#xff1f;&#xff1f; 举个栗子&#xff1a; model.chat是无法进入的&#xff0c;这时可以使用如下的命令进行操作&#xff1a; ?model.chat

Faiss核心解析:提升推荐系统的利器【AI写作免费】

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

今天又发现一个有意思的问题:SQL Server安装过程中下载报错,证明GPT是可以解决问题的

我们在安装数据库的时候&#xff0c;都会有报错问题&#xff0c;无论是Oracle、SQL Server、还是MySQL&#xff0c;都会遇到各种各样的报错&#xff0c;这归根到底还是因为电脑环境的不同&#xff0c;和用户安装的时候&#xff0c;操作习惯的不一样导致的问题。今天的问题是&am…

当前主机使用的磁盘以及带宽情况

今日看到有用户在论坛留言反馈他买了Hostease Linux虚拟主机&#xff0c;想要查看当前主机使用的磁盘以及带宽情况&#xff0c;但是不知道如何查看。因为这边也是对于Hostease的虚拟主机产品是有所了解的&#xff0c;知道他们都是默认带管理面板的操做起来很方便的&#xff0c;…

漫威争锋Marvel Rivals申请测试资格教程 最新获取测试资格教程

即将震撼登场的《漫威争锋》&#xff08;Marvel Rivals&#xff09;标志着PvP射击游戏领域的全新突破&#xff0c;由漫威官方网站全力支持推出。这款游戏定于5月11日早晨9点启幕其封闭Alpha测试章节&#xff0c;这场测试盛宴将持续整整十天。在首波测试浪潮中&#xff0c;玩家有…

如何使用IntelliJ IDEA SSH连接本地Linux服务器远程开发

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

今天是二叉树~

本文为博客&#xff1a;东哥带你刷二叉树&#xff08;纲领篇&#xff09; | labuladong 的算法笔记的笔记 前言 将二叉树的思想传递至动态规划&#xff0c;回溯算法&#xff0c;分治算法&#xff0c;图论算法&#xff01; 对于二叉树的每一个结点&#xff0c;我们需要思考的是…

数据分析必备:一步步教你如何用numpy改变数据处理(8)

1、Numpy 数组操作 Numpy 中包含了一些函数用于处理数组&#xff0c;大概可分为以下几类&#xff1a; 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 1.1、修改数组形状 numpy.reshape numpy.reshape 函数可以在不改变数据的条件下修改形状&a…

【热门话题】如何通过AI技术提升内容生产的效率与质量

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 如何通过AI技术提升内容生产的效率与质量引言一、自然语言处理&#xff08;NLP&…

win11安装SQL Server 2012 企业版

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、硬件要求二、软件安装参考&#xff1…

uniapp开发的小程序toast被键盘遮挡提示内容无法完全显示问题解决

文章目录 问题描述问题解决参考链接&#xff1a; 问题描述 在开发抖音小程序后&#xff0c;当用户提交反馈后&#xff0c;调用了系统的toast来显示是否提交成功&#xff0c;结果被系统的键盘给盖住&#xff0c;无法显示完全。 即&#xff0c;简单来说&#xff1a;Toast会被弹…

韩顺平0基础学Java——第4天

p45—p71 老天鹅&#xff0c;居然能中断这么久&#xff0c;唉...学不完了要 API API:application programing interface应用程序编程接口 www.matools.com 可以理解成Python的调包...c的头文件对吧 字符型 char用单引号 String用双引号 char本质上是个整数&#xff0c…

AutoTable, Hibernate自动建立表替代方案

痛点 之前一直使用JPA为主要ORM技术栈&#xff0c;主要是因为Mybatis没有实体逆向建表功能。虽然Mybatis有从数据库建立实体&#xff0c;但是实际应用却没那么美好&#xff1a;当实体变更时&#xff0c;往往不会单独再建立一个数据库重新生成表&#xff0c;然后把表再逆向为实…

Pygame简单入门教程(绘制Rect、控制移动、碰撞检测、Github项目源代码)

Pygame简明教程 引言&#xff1a;本教程中的源码已上传个人Github: GItHub链接 视频教程推荐&#xff1a;YouTube教程–有点过于简单了 官方文档推荐&#xff1a;虽然写的一般&#xff0c;但还是推荐&#xff01; Navigator~ Pygame简明教程安装pygame一、代码框架二、案件输入…

小红书释放被封手机号 无限注册

前几年抖音也可以释放被封手机号 那时候都不重视 导致现在被封手机号想释放 基本不可能的 或者就是最少几百块 有专业的人帮你通过某些信息差释放 本教程是拆解 小红书被封手机号怎么释放&#xff0c;从今年开始&#xff0c;被封的手机号无法注销了 所以很困扰 那么本教程来…

如何区分APP页面是H5还是原生页面?

刚刚接触手机测试的同学&#xff0c;或多或少都有过这样的疑问&#xff1a;APP页面哪些是H5页面&#xff1f;哪些是原生页面?单凭肉眼&#xff0c;简直太难区分了&#xff01;我总结了6个小技巧&#xff0c;希望能帮大家答疑解惑。 1、看断网的情况 断开网络&#xff0c;显示…

【生信技能树】拿到表达矩阵之后,如何使用ggplot2绘图系统绘制箱线图?

拿到表达矩阵之后&#xff0c;如何使用ggplot2绘图系统绘制箱线图&#xff1f; 目录 预备知识 绘制箱线图示例 预备知识 1.pivot_longer函数 pivot_longer 是tidyr包中的一个函数&#xff0c;用于将数据框&#xff08;data frame&#xff09;从宽格式转换为长格式。在宽格…