关于我、重生到500年前凭借C语言改变世界科技vlog.2——C语言数据类型和变量

nRF开发环境搭建全攻略:VS Code + nRF Connect SDK + Zephyr实战 嵌入式开发中,环境配置往往是新手入门的第一道障碍,尤其面对基于Zephyr RTOS的Nordic nRF平台时,工具链的复杂度常让人望而却步。理解构建系统、SDK版本管理和调试工具之间的协作关系,是高效开发的前提。Zephyr作为开源实时操作系统,通过设备树和Kconfig实现硬件描述与功能配置,而nRF Connect SDK(NCS)则是Nordic基于Zephyr的增强发行版,两者结合为物联网开发提供了强大支持。基于VS Code搭建开发环境,配合west工具管理多仓库、CMake/Ninja执行构 阅读详情

文章目录

  • 1.数据类型的介绍
    • 1.1 数据类型分类
    • 1.2 sizeof操作符
    • 1.3 signed和unsigned
  • 2.变量的介绍
    • 2.1 创建与初始化
    • 2.2 分类
    • 2.3 存储
  • 3.操作符的介绍
    • 3.1 算术操作符:+、-、*、/、%
    • 3.2 赋值操作符:=和复合赋值
    • 3.3 单目操作符:++、--、+、-
  • 4.强制类型转换
  • 5.占位符的介绍及使用
  • 6.scanf函数的介绍
  • 希望读者们多多三连支持
  • 小编会持续更新
  • 你们的鼓励就是我前进的动力!

1.数据类型的介绍

1.1 数据类型分类

C语言的数据类型多种多样,类型不仅是我们了解数据的开始,也是数据初始化、函数自定义等的操作,编译器只有知道了数据的类型,才能进行相应的操作
在这里插入图片描述

字符型:char、[signed] char(有符号字符)、[unsigned] char(无符号字符)

整型:int、[signed] int、unsigned int
短整型:short [int]、[signed] short [int]、unsigned int [int]
长整型:long [int]、[signed] long [int]、unsigned long [int]
更长的整型:long long [int]、[signed] long long [int]、unsigned long long [int]

浮点型:float、double、long double

布尔类型:布尔类型本不是专门的类型,后来为了表示真假,引入了布尔类型_Bool或bool,使用布尔类型必须包含头文件#include <stdbool.h>,布尔类型返回的是true或false,表示真假

注意每种类型的数据都有自己的长度,存储的数据范围有所差异,这里就不过多赘述(详情可看https://legacy.cplusplus.com/)

1.2 sizeof操作符

sizeof是一个关键字,也是个操作符,用于计算操作符数的类型长度,单位是字节
sizeof有两种计算方式:sizeof(类型)、sizeof 表达式
这里要注意的是sizeof后边的表达式是不参与真实运算的,例如:

​
#include <stdio.h>
int main() 
{
    int num = 10;
    int result = sizeof(num + 20);
    // 这里 num + 20 并不会真正进行加法运算,只是根据 num 的类zd型(int)来确定大小。
    printf("Size of num + 20: %zd\n", result);
    return 0;
}

显而易见这里输出的result的值应为4,在VS2022的X64环境下,常见的int为4个字节,char为1个字节,这里只是根据其类型得出是4个字节。而且sizeof需要用%zd(无符号整型)来打印,sizeof的计算结果是size_t类型的。

sizeof 运算符的返回值,C 语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定, sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是unsigned int ,也有可能是 unsigned long ,甚至是 unsigned long long ,对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。C 语言提供了⼀个解决方法,创造了⼀个类型别名 size_t ,用来统⼀表示 sizeof 的返回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是unsigned long long

1.3 signed和unsigned

signed表示一个类型带有正负号,unsigned表示一个类型不带有正负号,也就是正整数,所以对于int来说完整的写法应该是signed int,只不过平常忽略不写,但写了也不算错

int 类型也可以不带正负号,只表示非负整数,这时就必须使用关键字unsigned声明变量。unsigned int里面的int可以省略,也就是可以写成unsigned,字符char也存在signed、unsigned

值得注意的是C语言规定char是否默认带有正负号由当前系统决定,这就是说,char 不等同于 signed char ,它有可能是 signed char ,也有可能是unsigned char

2.变量的介绍

2.1 创建与初始化

我们都知道变化的量叫变量,不变的称为常量,创建形式为data_type name,第一个为数据类型,第二个为变量名,例如int a = 10,在变量在创建的时候就给⼀个初始值,这就叫初始化

2.2 分类

全局变量:在大括号外部定义的变量就是全局变量
全局变量的使用范围更广,整个工程中想使用,都是有办法使用的

局部变量:在大括号内部定义的变量就是局部变量
局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的

注意当局部变量和全局变量同名时,局部变量优先使用

2.3 存储

内存中有三个区域:栈区、堆区、静态区

  1. 局部变量是放在内存的栈区
  2. 全局变量是放在内存的静态区
  3. 堆区是用来动态内存管理的(后期会介绍)

3.操作符的介绍

3.1 算术操作符:+、-、*、/、%

C语⾔中为了方便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。
分别是: + - * / % ,这些操作符需要两个操作数进行计算的都是双目操作符,操作符也叫做运算符

用+ 和 - 来完成加法和减法

运算符 * 用来完成乘法

运算符 / 用来完成除法,除号的两端如果是整数,执行的是整数除法,得到的结果也是整数,如果运算数中至少有一个float浮点数,就能得到浮点数

运算符 % 表示求模(余)运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数,负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定

3.2 赋值操作符:=和复合赋值

赋值操作符 = 是⼀个随时可以给变量赋值的操作符,要赋的值放在右边。赋值也可以连续赋值,从右向左依次赋值

对一个数进行自增、自减操作

int a = 10;
a = a+3;
a = a-2;

用复合赋值的方法:

int a = 10;
a += 3;
a -= 2;

代码会显得更方便简洁,对以上的算术操作符都适用

3.3 单目操作符:++、–、+、-

C语言中还有⼀些操作符只有⼀个操作数,被称
为单目操作符。 ++、–、+(正)、-(负) 就是单目操作符

前置++

int a = 10;
int b = ++a;//++的操作数是a,是放在a的前⾯的,就是前置++
printf("a=%d b=%d\n",a , b);

计算口诀:先+1,后使用
a原来是10,先+1,后a变成了11,再使用就是赋值给b,b得到的也是11,所以计算后,a和b都是11

后置++

int a = 10;
int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++
printf("a=%d b=%d\n",a , b);

计算口诀:先使用,后+1
a原来是10,先使用,就是先赋值给b,b得到了10,然后再+1,然后a变成了11,所以直接计算后a是11,b是10

前置–和后置++与上面同理

4.强制类型转换

以一段代码做例子就明白了

int a = 3.14;
//a的是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告

消除这个警告,就可以使用强制类型转换

int a = (int)3.14;//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分入代码片

注意强制转化只在万不得已的时候使用

5.占位符的介绍及使用

占位符在printf中这样使用:

#include <stdio.h>
int main()
{
 printf("There are %d apples\n", 3);
 return 0;
}

这里输出There are 3 apples,这样输出语句更能提高程序的稳定性和准确性

除此之外,还有很多常见的占位符
• %c :字符。
• %d :十进制整数
• %f :小数(包含 float 类型和 double 类型)
• %p :指针(用来打印地址)
• %s :字符串。
• %u :无符号整数
• %x :十六进制整数
• %zd : size_t 类型

限定宽度

#include <stdio.h>
int main()
{
 printf("%5d\n", 123); // 输出为 "  123"
 return 0;
}

%5d 表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。输出的值默认是右对齐,即输出内容前面会有空格
如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的 % 的后面插入⼀个 - 号

总是显示正负号

默认情况下, printf() 不对正数显示 + 号,只对负数显示 - 号。如果想让正数也输出 + 号,可
以在占位符的 % 后面加⼀个 +

限定小数位数

// 输出 Number is 0.50
#include <stdio.h>
int main()
{
 printf("Number is %.2f\n", 0.5);
 return 0;
}

如果希望小数点后面输出3位( 0.500 ),占位符就要写成 %.3f
也可以和限定宽度结合使用,比如%6.2f,输出为"**0.50"(这里的*表示空格)
最小宽度和小数位数这两个限定值,都可以用 *代替,通过 printf() 的参数传入

输出部分字符串

可以用 %.[m]s 指定输出的长度,其中 [m] 代表⼀个数字,表示所要输出的长度

// 输出 hello
#include <stdio.h>
int main()
{
 printf("%.5s\n", "hello world");
 return 0;
}

这里输出前五个字符,即“hello”

6.scanf函数的介绍

scanf() 函数用于读取用户的键盘输入
程序运行到这个语句时,会停下来,等待用户从键盘输入,输入数据、按下回车键后, scanf() 就会处理用户的输入,将其存入变量

scanf的使用方法与printf类似

scanf("%d%d%f%f", &i, &j, &x, &y);

不过scanf需要加取地址符号&(后面会讲)

注意scanf() 的返回值是一个整数,表示成功读取的变量个数。
如果没有读取任何项,或者匹配失败,则返回 0 。
如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量 EOF (-1)

希望读者们多多三连支持

小编会持续更新

你们的鼓励就是我前进的动力!

在这里插入图片描述

HINT: High-quality INpainting Transformer with Mask-Aware Encoding and Enhanced Attention 训练自己的数据集 HINT(高质量图像修复变换器)通过创新的掩码感知像素洗牌下采样模块(MPD)和空间激活通道注意力层(SCAL),显著提高了图像修复的质量,尤其在大面积缺失区域的情况下。实验表明,HINT在CelebA、CelebA-HQ、Places2和敦煌数据集上超越了现有的最先进模型,提升了图像的细节和结构一致性。 阅读详情

相关推荐

ESP32蓝牙配网实战:微信小程序中的blufi协议实现与优化

本文详细介绍了在微信小程序中实现ESP32蓝牙配网的实战经验,重点解析了blufi协议的应用与优化。内容涵盖从开发环境配置、协议帧格式解析,到小程序端蓝牙通信、数据转换的核心步骤,并提供了配网状态机设计、错误处理及性能调优等进阶方案,旨在帮助开发者高效、稳定地完成物联网设备配网功能开发。

weixin_29159613的博客 459

关于我、重生到500年前凭借C语言改变世界科技vlog.18——内存函数

内存函数是用于的一组函数,它们可以对内存进行复制、移动、设置和比较等操作。这些函数主要在头文件中声明,其操作对象通常是字节序列,不管这些字节代表的是字符、整数还是其他数据类型。

Zero_VPN的博客 6743

三菱FX5U运动控制(步进)

三菱FX5U脉冲定位控制,原点回归,相对定位,绝对定位,运动控制案例。

weixin_55762091的博客 1万+

关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧

本篇为指针系列的最后一篇,我们将在该篇 vlog 对指针的常见表达形式的概念及技巧进行深入的解析,通过该篇 vlog 可以让你以后在遇到指针时基本都能将代码转化为自己的语言去理解,建议先思考后再看解析,更有助于加深理解,希望能够为广大读者们在初学指针时排忧解惑 😃。

Zero_VPN的博客 4153

VASP计算层错能(SFE)全攻略2

本文介绍了使用VASP计算纯镍(Ni)层错能(SFE)的具体步骤。首先构建Ni的FCC单胞并扩展为超胞,通过修改原子位置引入堆垛层错;随后分别计算完美晶体和含层错结构的能量;最后通过能量差与层错面积之比求得SFE值。计算需注意k点网格、截断能和超胞尺寸的收敛性测试,并推荐使用PAW赝势和ASE等工具辅助结构构建。

weixin_50519490的博客 1988

Android布局基础与UI设计入门:打造精美应用界面

恭喜你!现在你已经掌握了Android UI开发的基础知识,包括各种布局类型、常用控件的使用以及一些UI优化技巧。这些知识将帮助你设计出既美观又实用的Android应用界面。

m0_65382359的博客 2057

关于我、重生到500年前凭借C语言改变世界科技vlog.20——自定义类型:联合&&枚举

在上一篇博文中我们学习了常见自定义类型中的一种——结构体,如果我们想要用常量准确表示一系列颜色,表示星期一到星期日这些变量呢?那么**枚举**就是一种合适的类型;如果我们即想在一块区域内存储不同的变量,又想节省内存空间呢?那么**联合体**就是一种有效的类型,接下来将对这两种自定义类型进行详细的介绍😘

Zero_VPN的博客 5818

使用vite+react+ts+Ant Design开发后台管理项目(四)

本文将引导开发者从零基础开始,运用、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术工具,从项目构思到最终实现的全过程,提供清晰的开发思路和实用的技术应用技巧。使用vite+react+ts+Ant Design开发后台管理项目(一)使用vite+react+ts+Ant Design开发后台管理项目(二)

lbking666666的专栏 2007

关于我、重生到500年前凭借C语言改变世界科技vlog.5——数组

数组简单理解就是一组相同类型元素的集合注意:• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0• 数组中存放的多个数据,类型是相同的• 数组分为一维数组和多维数组,常见多维数组为二维数组。

Zero_VPN的博客 2250

适航文章汇总:知识体系全面梳理

无论您是行业新手还是经验丰富的专业人士,都可以通过本篇文章快速查找相关资料,提高对适航认证、机载系统、软件及硬件等领域的理解。本部分详细解析ARP 4754A、ARP 4761、DO-178C、DO-254等核心标准,并介绍其在机载系统开发中的应用。介绍FAA、EASA、CCAR等主要航空管理机构的适航规章体系,并说明各类飞行器(如固定翼、旋翼机、无人机等)的适航要求。本部分还探讨硬件设计、验证与确认过程中的挑战。从系统架构设计到机载设备的集成与管理,本部分介绍机载系统的研发体系及适航管理的最佳实践。

qq_41854911的博客 1452

SerDes电路的PCB仿真设计规则及策略

SerDes的PCB设计中,重点工作是使用3D 电磁 (EM) 场求解器,进行过孔结构优化,包括 BGA的扇入和扇出区域以及布线的过孔区域,并且,利用连接器供应商提供加密的 3D 模型,进行连接器和 PCB 的级联仿真,最终获取系统级的通道性能参数,如插入损耗、回波损耗、串扰和模式转换、阻抗曲线等,如果发现任何缺陷,再进行进一步优化,这一过程中,推荐进行拆分仿真,以提高设计效率。

一只豌豆象的博客 2193

关于我、重生到500年前凭借C语言改变世界科技vlog.14——常见C语言算法

根据当前所学C语言知识,对前面知识进行及时的总结巩固,出了这么一篇 vlog 介绍当前所学知识能遇到的常见算法,这些算法是在C数据结构初阶常用的一些算法,重要性不言而喻,本章将用简单易懂的语言带领读者深入理解。

Zero_VPN的博客 2611

Claude Code(1):手把手教你安装配置 Claude Code

Claude Code 是一款强大的 AI 编程助手工具,能够帮助开发者提升编码效率。本文将详细介绍如何在不同操作系统上安装和配置 Claude Code,让你快速上手这款工具。

blues_C的博客 756

关于我、重生到500年前凭借C语言改变世界科技vlog.8——函数递归

在 vlog.2 的 printf 函数的返回值举例中,我们使用多次递归的方式实现了同一个函数的返回值调用,但这只是一个简易的递归,不算真正意义上的递归,那么什么是递归?在C语言中,递归就是函数自己调用自己,如果函数的递归没有限制条件,一直无限循环调用下去,代码最终就会陷入死循环,导致栈溢出递归就是递推的意思,递归的思考方式就是将大事化小,将复杂的程序化成简单的代码格式,也就是化成一个个子问题求解,知道子程序不再被分解,递归就结束了。

Zero_VPN的博客 2444

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

关于我、重生到500年前凭借C语言改变世界科技vlog.6——函数

C语言中规定了各种法则,C语言本身并不提供库函数,但编译器厂商根据国际标准的ANSIC规定的一些函数标准给出了一些函数,这些函数就被称为库函数前面我们学过的printf,scanf等都是库函数中现成的可以直接使用的函数,这些函数方便了程序员对代码功能的实现,一定程度上提升了效率性和保障性学习库函数的各种函数对一名合格的程序员来说很重要C/C++官方的链接:https://zh.cppreference.com/w/c/header函数原型函数功能介绍参数和返回类型说明代码举例

Zero_VPN的博客 1899

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

关于我、重生到500年前凭借C语言改变世界科技vlog.21——动态内存管理

通常我们开辟空间都是固定的,然后再在这上面操作,但是万一我们想要修改可使用的空间呢,回去反复的修改有些麻烦。许多数据结构的大小在程序运行时才能确定,比如有个学生信息录入,会有不断学生将信息录入,无法事先知道应该用多大的空间来存放,那么动态内存的开辟就很有用了,可以在编译过程中修改可使用的空间大小

Zero_VPN的博客 3796

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

关于我、重生到500年前凭借C语言改变世界科技vlog.15——深入理解指针(4)

回调函数就是一个通过函数指针调用的函数如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数正如我们在上一篇 vlog 中讲到的转移表,就是经典的回调函数,回调函数不是函数本身自己实现的,而是在特定的事件或条件发生的时候由另一方调用,对该事件或条件进行响应关于

Zero_VPN的博客 3336

关于我、重生到500年前凭借C语言改变世界科技vlog.11——深入理解指针(1)

这一篇 vlog 开始我们将对C语言中极其重要的章节——指针,进行全方位的深入理解,指针几乎占据了C语言大部分重要代码,学会了指针可以实现更多复杂有效的功能,博主将用5篇vlog带领读者们进行你从未感受过的全面细致指针理解之旅!

Zero_VPN的博客 3428

关于我、重生到500年前凭借C语言改变世界科技vlog.19——自定义类型:结构体

前面在学习操作符的时候,已经对结构体有了初步了解,结构体不仅在C语言中经常使用,也为C++学习类和对象打下基础,本篇 vlog 将对结构体进行详细的解析

Zero_VPN的博客 3121

关于我、重生到500年前凭借C语言改变世界科技vlog.13——深入理解指针(3)

本章节接着学习常见的指针变量类型。

Zero_VPN的博客 2870

关于我、重生到500年前凭借C语言改变世界科技vlog.17——字符函数&&字符串函数

字符函数和字符串函数是C语言中经常用到的两类函数,它们主要用于处理字符数据和字符串数据,本篇 vlog 涉及的函数比较多,注意区分和辨别参数,返回值,类型,适用场景,相信通过这一篇对字符及字符串的处理会有更深入的理解。

Zero_VPN的博客 2222

关于我、重生到500年前凭借C语言改变世界科技vlog.10——进制转化&&操作符进阶

操作符在写代码中有很大的作用,是用于执行特定操作的符号,主要在算术运算、比较运算、逻辑运算、位运算(用于二进制数据处理)起作用,C语言开篇已经介绍了一部分,接下来将进行一些进阶的介绍

Zero_VPN的博客 3988

关于我、重生到500年前凭借C语言改变世界科技vlog.9——青蛙跳台阶、汉诺塔

书说上回,讲到了函数递归,迭代,这章 vlog 将针对递归迭代解决十分经典的两个问题上一篇文章:https://blog.csdn.net/Zero_VPN/article/details/143168763?

Zero_VPN的博客 1896

关于我、重生到500年前凭借C语言改变世界科技vlog.7——数组函数实践

掌握了前面的数组与函数的知识,我们可以制作一款大多电脑上都有的简易版经典小游戏——扫雷游戏要求:1.游戏使用菜单可以选择继续游玩或退出游戏2.扫雷为 9 * 9 格子的棋盘3.默认随机布置 10 个雷4.排查雷:如果该位置不是雷,就显示周围有几个雷如果该位置是雷,就炸死游戏结束把除 10 个雷以外的空格都找出来就算游戏胜利

Zero_VPN的博客 2099

关于我、重生到500年前凭借C语言改变世界科技vlog.12——深入理解指针(2)

通过以上代码调试后可以发现,sz1 = 10,sz2 = 1,同样的算法应该 sz1 = sz2 =10 ,但穿过去的形参根据结果 sizeof(arr) 只计算出一个元素的大小,前面我们提到 arr 表示首元素的地址,那么在数组传参的时候,传递的是数组名,也就是数组传参的时候传递的是首元素的地址。很显然,根据代码结果,两段代码地址相差40,那么假设就是错的,所以 &arr 表示的是整个数组的大小。指针数组是一个数组,比如整型数组存放的数组,字符数组存放的是字符,那么指针数组存放的就是指针。

Zero_VPN的博客 2708

关于我、重生到500年前凭借C语言改变世界科技vlog.3——分支和循环(上)

C语言的结构分为顺序结构、选择结构、循环结构,结构化程序设计离不开这三种结构或这三种结构的组合,合理快速的运用这些结构是学好C语言的基础。

Zero_VPN的博客 1707
上一篇: 关于我、重生到500年前凭借C语言改变世界科技vlog.1——C语言常见概念
下一篇: 关于我、重生到500年前凭借C语言改变世界科技vlog.3——分支和循环(上)
澪贰
澪贰 优质创作者: C/C++技术领域 优质创作者: C/C++技术领域
博客等级 码龄2年 1万+粉丝 222原创
评论 28
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值