【C#学习笔记02】基本元素与数据类型

news2025/3/11 19:27:27

引言

深入了解C语言的基本元素、计算机存储器结构、常量与变量的概念以及数据类型。这些内容是C语言编程的基础,掌握它们对于编写高效、可靠的嵌入式程序至关重要。


1.C语言的基本元素

​编程语言的发展离不开自然语言,所以编程语言的语法和词汇也是由自然语言发展而来,而自然语言的基础是文字,举个例子:想要学会汉语,则必须先学会汉字,想要学会英语,则必须先学会单词,通过下图可以知道,想要学会C语言,必须先学会关键字。

完成一个程序设计的过程就相当于是完成一篇文章的编写,而一篇文章(程序)是由多个段落(函数)构成的,一个段落(函数)是由多个句子(语句)构成的,一个句子(语句)是由多个短语(表达式)构成的,一个短语(表达式)是由多个单词(标识符)构成的,一个单词(标识符)是由多个文字(字符)组成的。

C语言程序由一系列基本元素构成,这些元素包括:

  • 字符集:C语言支持的基本字符,包括字母、数字、特殊符号(如​​+​​、​​-​​、​​*​​等)。
  • 关键字:C语言中具有特殊含义的保留字,如​​int​​、​​return​​、​​if​​等。
  • 标识符:由程序员定义的名称,用于表示变量、函数、数组等。
  • 运算符:用于执行操作的符号,如算术运算符(​​+​​、​​-​​)、关系运算符(​​>​​、​​<​​)等。
  • 分隔符:用于分隔代码元素的符号,如分号(​​;​​)、逗号(​​,​​)等。
#include <stdio.h>

int main() {
    int a = 10;  // int是关键字,a是标识符
    int b = 20;
    int sum = a + b;  // +是运算符
    printf("Sum: %d\n", sum);  // ;是分隔符
    return 0;
}

可以看到,C语言标准中常用的关键字只有32个,并且这些关键字都是小写的,并且都是某些英文单词的缩写。 int -- integer   char -- character 


2. 计算机存储器结构

数据概念

数据是计算机处理的基本单位,可以是数字、字符、布尔值等。在C语言中,数据通过变量和常量来表示。人类使用计算机的目的就是为了高效的处理大量数据,但是数据的类型有很多,比如声音、图像、文字、数字等,那计算机是如何区分数据的呢? 回答:计算机不用区分,计算机只采用二进制存储。


内存概念

内存是计算机用于存储数据和程序的硬件设备。每个内存单元都有一个唯一的地址,程序通过地址访问内存中的数据。

对于计算机中的存储器而言,一般分为两种:RAM(随机存储器)ROM(只读存储器)  

(1) 只读存储器

只读存储器的英文全称是Read Only Memory,简称为ROM,属于非易失性存储设备,指的是掉电不丢失数据,可以把数据长时间存储,一般分为很多种,具体的区别可以通过《数电》进行了解,对于计算机的机械硬盘或者固态硬盘而言指的就是ROM。

(2) 随机存储器

随机存储器的英文全称是Random Access Memory,简称为RAM,属于易失性存储设备,指的是掉电会丢失数据,但是读写速度很快。所以一般CPU都是直接和RAM打交道。


内存单位

内存中一个MOS管可以存储一个二进制数0或1,为了方便记忆,标准规定把一个二进制数用bit来进行表示,bit(比特)是binary digit的缩写,中文翻译为。专业术语一般把一个二进制数称为一位二进制数。所以bit就用来表示计算机数据的最小单位。

注意计算机处理数据的基本单位是byte,计算机处理数据的最小单位是bit,1byte = 8bit。

内存的单位从小到大依次为:

  • 位(Bit):最小的存储单位,表示一个二进制位(0或1)。
  • 字节(Byte):8位组成一个字节,是内存的基本单位。
  • 千字节(KB):1024字节。
  • 兆字节(MB):1024千字节。
  • 吉字节(GB):1024兆字节。

#include <stdio.h>

int main() {
    int a = 10;  // 假设int类型占4个字节
    printf("Size of a: %lu bytes\n", sizeof(a));  // 输出a占用的内存大小
    return 0;
}

3. C语言的常量与变量

C语言采用常量(Constant)和变量(Variable)作为数据存储的基本单元。从内存管理的角度来看,内存是由连续编址的存储单元构成的物理空间,每个存储单元(8位)都具有唯一的地址标识。虽然理论上可以通过直接寻址方式访问这些存储单元,但由于效率考量,实践中通常采用更高级的抽象访问机制。

根据C语言规范,开发者享有动态内存申请权限。申请过程需遵循以下协议:

  1. 显式声明所需内存空间的大小(以字节为单位)
  2. 内核负责在物理内存中定位合适的连续空间
  3. 系统将分配的内存首地址返回给申请者

为提升内存访问效率,C语言引入了符号化访问机制:

  • 开发者可为分配的内存空间指定标识符
  • 系统维护符号名与物理地址的映射关系
  • 通过符号名实现间接内存访问

基于数据可变性特征,C语言将存储单元划分为两种类型:

  1. 常量(Constant):程序运行期间值不可变
  2. 变量(Variable):程序运行期间值可变

常量

​常量指的是在程序运行期间值不会发生改变的量,一般使用的数字,比如3.14用来表示圆周率,一般情况下,用户都是用通过宏定义的方式来实现常量的设计,宏定义其实就是简单的文本替换,在预处理阶段预处理器会把程序中的宏定义进行展开。C语言中规定宏定义使用预处理指令 #define 来进行设计。

常量是程序运行过程中值不会改变的数据。常量可以分为以下几种:

  • 整型常量:如​​10​​、​​-20​​。
  • 浮点型常量:如​​3.14​​、​​-0.5​​。
  • 字符常量:如​​'A'​​、​​'1'​​。
  • 字符串常量:如​​"Hello, World!"​​。

变量

变量是程序运行过程中值可以改变的数据。变量指的是在程序运行期间值可能发生变化的量,用户可以根据实际需要来向kernel申请一块存储单元,并对这块存储单元进行命名,然后用户可以随时修改存储单元中的数据。申请的存储单元的大小可以通过C语言中的数据类型进行指定。

命名规则

变量和常量的命名需要遵循以下规则:

  • 只能包含字母、数字和下划线(​​_​​)。
  • 不能以数字开头。
  • 不能使用C语言关键字。
  • 区分大小写。

注意为了防止二义性出现,C语言标准规定不可以把系统保留字,以及程序中已经存在的函数名称、以及用户已经定义出来的标识符名称作为新的标识符名称(同一个作用域内不能)。  

另外C语言的标识符是区分大小写,并且作为用户而言,标识符的命名应该是有意义的

int myVariable;  // 合法
int _value;      // 合法
int 1value;      // 非法,不能以数字开头
int return;      // 非法,return是关键字

4. C语言的数据类型

C语言提供了丰富的数据类型,用于表示不同类型的数据。以下是常见的数据类型:


字符型(​​char​​)

字符型用于存储单个字符,占用1个字节。C语言标准中提供了一个关键字 char ,其实是 character 单词的缩写,表示字符的意思,操作系统char类型的数据宽度定义为1字节,用于存储字符,C语言标准中用单撇号’ ’表示字符。

C语言标准规定:用户打算存储字符   数据宽度  变量名称 ;  举例: char  ch  =  ‘c’ ;

C语言标准中关于字符的种类有两种:普通字符 and 转义字符,对于ASCII码表中转义字符

注意ASCII码中的转义字符需要使用 ‘\0’  ‘\r’  ‘\n’进行表示,代表字符具有特殊的意义分别表示:空格、换行和回车。

#include <stdio.h>

int main() {
    char letter = 'A';
    printf("%c\n", letter);
    return 0;
}

输出

A

整数型(​​int​​)

C语言标准中使用关键字int表示整数,整数型用于存储整数值,通常占用4个字节,关键字 int 的英文单词是 integer ,对应的中文具有整数的含义,在32系统下关键字int的数据宽度是4字节,也就意味着存储单元所能存储的整数范围比较广泛。

#include <stdio.h>

int main() {
    int number = 100;
    printf("%d\n", number);
    return 0;
}

输出

100

短整型(​​short​​)

C语言标准中规定使用关键字 short 来表示短整型,短整型用于存储较小的整数值,通常占用2个字节。一般短整型的全称是 short int ,只不过写程序的时候可以只写 short 即可,在32位系统下 short 短整型占2字节。

#include <stdio.h>

int main() {
    short smallNumber = 32767;
    printf("%d\n", smallNumber);
    return 0;
}

输出

32767

长整型(​​long​​)

C语言标准中规定使用关键字 long 来表示长整型,长整型用于存储较大的整数值,通常占用4个或8个字节。一般长整型的全称是 long int ,只不过写程序的时候可以只写long即可,在32位系统下 long 长整型占4字节,在64位系统占8字节。

#include <stdio.h>

int main() {
    long bigNumber = 2147483647;
    printf("%ld\n", bigNumber);
    return 0;
}

输出

2147483647

长长整型(​​long long​​)

C语言标准中规定使用关键字 long long 来表示长长整型,长长整型用于存储非常大的整数值。但是长长整型是使用 long long 来表示,在32位和64位系统下长长整型占8字节。

#include <stdio.h>

int main() {
    long long hugeNumber = 9223372036854775807;
    printf("%lld\n", hugeNumber);
    return 0;
}

输出

9223372036854775807

浮点型(​​float​​和​​double​​)

数据有整数和小数之分,一般情况下处理的数据也是具有小数的,所以C语言标准中规定使用关键字 float 来表示单精度浮点数,单精度浮点型占4字节,另外C语言标准中也提供了另一个关键字 double 用来表示双精度浮点数,double 占8字节,其实C语言也提供了一种类型 long double,该类型占16字节。

#include <stdio.h>

int main() {
    float pi = 3.14;
    double precisePi = 3.1415926535;
    printf("%f\n", pi);
    printf("%f\n", precisePi);
    return 0;
}

输出

3.14
3.1415926535

字符串

字符串是表示某种含义的一个字符序列,字符串在内存是需要一块连续的内存空间进行存储,C语言中规定字符串使用双引号””表示,并且规定字符串的结束标志是’\0’,但’\0’不需要用户手动添加,系统会自动在一个字符串的末尾添加’\0’

#include <stdio.h>

int main() {
    char name[] = "Alice";
    printf("%s\n", name);
    return 0;
}

输出

Alice

布尔型(​​bool​​)

用户有时候需要在程序进行判断,在C89标准中,用户如果想要判断某种条件是否成立,一般是定义一个整型变量,然后利用数字0和数字1来表示条件是否成立,用户就可以把变量作为一个标志位使用。  在C99标准可以使用布尔型来表示真假两种情况,头文件 stdbool.h 有相关描述,在头文件中定义了三个宏,分别是 bool、true 以及 false

#include <stdio.h>
#include <stdbool.h>

int main() {
    bool isCodingFun = true;
    printf("%d\n", isCodingFun);  // 输出1表示true
    return 0;
}

输出

1

补充

​C语言标准中提供了两个关键字  &&  unsigned用于修饰整数,unsigned表示无符号,signed表示有符号,C语言中的signed修饰符是隐式声明,也就是用户定义整型变量的时候如果没有特别强调,则整型变量默认是有符号的。用户如果要存储无符号的整数,则必须定义变量必须显式声明变量是无符号的(unsigned)。

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

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

相关文章

<建模软件安装教程1>Blender4.2系列

Blender4.2安装教程 0注意&#xff1a;Windows环境下安装 第一步&#xff0c;百度网盘提取安装包。百度网盘链接&#xff1a;通过网盘分享的文件&#xff1a;blender.zip 链接: https://pan.baidu.com/s/1OG0jMMtN0qWDSQ6z_rE-9w 提取码: 0309 --来自百度网盘超级会员v3的分…

Docker极简部署开源播放器Splayer结合内网穿透远程流畅在线听歌

前言 嘿&#xff0c;各位音乐发烧友们&#xff01;如果你厌倦了广告的打扰&#xff0c;渴望在忙碌的生活中找到一片宁静的音乐天地&#xff0c;那么今天这篇教程绝对适合你——如何在Ubuntu上用Docker快速搭建一款高颜值、无广告的某抑云音乐播放器Splayer。 Splayer不仅界面…

显示器长时间黑屏

现象 电脑启动后,进入登录界面前会随机黑屏,有时候十几秒,有时候几分钟 进入桌面后,长时间不操作电脑黑屏,移动鼠标,点击键盘后尝试点亮屏幕,也会消耗较长时间 尝试 重装系统,或者重新安装显卡,都能够恢复,但过段时间以后又出现黑屏情况 集成显卡,独立显卡都出现过 操作系统…

内网安全-横向移动PTH 哈希PTT 票据PTK 密匙Kerberos密码喷射

一.域横向pth&#xff0c;mimkatz&#xff0c;NTLM windwos server 2012 R2之前可能是NTLM和LM&#xff0c;之后为NTLM 1.mimkatz ptk 使用mimkatz进行横向移动 mimikatz sekurlsa::pth /user:administrator&#xff08;目标本地用户名&#xff09; /domain:192.168.3.32&a…

自然语言处理文本分析:从词袋模型到认知智能的进化之旅

清晨&#xff0c;当智能音箱准确识别出"播放周杰伦最新专辑"的模糊语音指令时&#xff1b;午间&#xff0c;企业舆情系统自动标记出十万条评论中的负面情绪&#xff1b;深夜&#xff0c;科研人员用GPT-4解析百万篇论文发现新材料线索——这些场景背后&#xff0c;是自…

STM32如何精准控制步进电机?

在工业自动化、机器人控制等场合&#xff0c;步进电机以其高精度、开环控制的特性得到了广泛应用。而在嵌入式系统中&#xff0c;使用STM32进行步进电机的精确控制&#xff0c;已成为开发者的首选方案之一。 本文将从嵌入式开发者的角度&#xff0c;深入探讨如何基于STM32 MCU…

[免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版…

STM32 Bootloader理解

STM32 Bootloader个人理解 stm32单片机启动时会先运行一个引导程序Bootloader&#xff0c;该程序可以判断单片机的启动方式&#xff0c;例如stm32f103单片机会利用 boot0 、boot1 两个引脚判断启动模式。判断完启动模式后&#xff0c;设置 SP地址 以及 PC 指针指向对应的地址。…

Linux SSHD 启动失败:OpenSSL 版本不匹配问题分析与解决

文章目录 Linux SSHD 启动失败&#xff1a;OpenSSL 版本不匹配问题分析与解决问题分析解决方案方法 1&#xff1a;重启 SSH 服务方法 2&#xff1a;检查 sshd 依赖的 OpenSSL 版本方法 3&#xff1a;检查 OpenSSL 共享库方法 4&#xff1a;重新安装 OpenSSH 总结 Linux SSHD 启…

SpringBoot实战(三十五)微服务集成OAuth2.0(UAA)

目录 一、知识回顾1.1 什么是 OAuth2 协议&#xff1f;1.2 OAuth2 的4个角色1.3 OAuth2 的3种令牌1.4 OAuth2 的5种认证方式1.5 OAuth2 内置接口地址 二、UAA介绍2.1 概述2.2 UAA的主要功能2.3 UAA 的应用场景 三、微服务集成3.1 集成示例介绍3.2 集成测试 一、知识回顾 在进行…

DeepSeek进阶应用(一):结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)

&#x1f31f;前言: 在软件开发、项目管理和系统设计等领域&#xff0c;图表是表达复杂信息的有效工具。随着AI助手如DeepSeek的普及&#xff0c;我们现在可以更轻松地创建各种专业图表。 名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&…

DeepSeek未来发展趋势:开创智能时代的新风口

DeepSeek未来发展趋势&#xff1a;开创智能时代的新风口 随着人工智能&#xff08;AI&#xff09;、深度学习&#xff08;DL&#xff09;和大数据的飞速发展&#xff0c;众多创新型技术已经逐渐走向成熟&#xff0c;而DeepSeek作为这一领域的新兴力量&#xff0c;正逐步吸引越…

从0开始的操作系统手搓教程24——完成我们的键盘驱动子系统

目录 所以&#xff0c;我们现来说说转义字符 我们需要如何处理扫描码 当键入的是双字符键时 当键入的是字母键时 下一篇 我们下面来看看我们的键盘驱动子系统是一个怎么个事情。 驱动程序&#xff0c;你可以认为是对硬件的一层封装。我们按照手册规格的规定姿势&#xff0…

git大文件传输报错

简述 git传输大于25M的文件时会报错&#xff0c;需要使用 Git LFS进行文件传输。 Git LFS&#xff08;Large File Storage&#xff09;是 GitHub 推荐的方式&#xff0c;可以管理大文件而不会影响 Git 性能。 操作流程 # 安装 Git LFS git lfs install# 将 PDF 文件添加到 G…

基础玩转物联网-4G模块如何快速实现与MQTT服务器通信

目录 1 前言 2 环境搭建 2.1 硬件准备 2.2 软件准备 2.3 硬件连接 2.4 检查驱动 3 连接MQTT服务器 3.1 创建MQTT监听Topic 3.2 打开配置工具读取基本信息 3.3 设置连接参数进行数据交互 4 总结 1 前言 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻…

使用Beanshell前置处理器对Jmeter的请求body进行加密

这里我们用HmacSHA256来进行加密举例&#xff1a; 步骤&#xff1a; 1.先获取请求参数并对请求参数进行处理&#xff08;处理成String类型&#xff09; //处理请求参数的两种方法&#xff1a; //方法一&#xff1a; //获取请求 Arguments args sampler.getArguments(); //转…

mac本地部署Qwq-32b记录

导语 昨天看到阿里开源了Qwq-32b&#xff0c;号称性能可以媲美Deepseek-R1。今天晚上有空就在Mac上折腾了一下&#xff0c;使用ollma进行了部署&#xff0c;效果感觉还不错&#xff0c;特此记录。 环境 硬件 型号&#xff1a;Macbook M1 Pro 14寸内存&#xff1a;512G 环境…

【病毒分析】熊猫烧香病毒分析及其查杀修复

目录 前言 一、样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 二、具体行为分析 2.1 主要行为 2.1.1 恶意程序对用户造成的危害 2.2 恶意代码分析 2.2.1 加固后的恶意代码树结构图(是否有加固) 2.2.2 恶意程序的代码分析片段 三、解决方案(或总结) 3.1 …

【语料数据爬虫】Python实现将Json语料数据转换成Word文档

前言 本文是该专栏的第1篇,后面会持续分享Python爬虫采集各种语料数据的的干货知识,值得关注。 本专栏为笔者精心推出的“语料数据”爬虫专栏,特别适合需要写作素材的同学,该专栏文章以采集最新的“语料数据”为主,最终篇幅将涵盖【百万级语料数据】库。 值得一提的是,…

警惕AI神话破灭:深度解析大模型缺陷与禁用场景指南

摘要 当前AI大模型虽展现强大能力&#xff0c;但其本质缺陷可能引发系统性风险。本文从认知鸿沟、数据困境、伦理雷区、技术瓶颈四大维度剖析大模型局限性&#xff0c;揭示医疗诊断、法律决策等8类禁用场景&#xff0c;提出可信AI建设框架与用户防护策略。通过理论分析与实操案…