C语言基础篇1:数据类型、常量、变量

news2024/11/26 22:37:17

1 C语言基础

1.1 关键字

        在C语言中,关键字是指被赋予特定意义的一些单词,不能把这些单词作为标识符来使用.C语言一共有32个关键字,如下图。在后面的学习中会逐渐接触到这些关键字的具体使用用法。

    

1.2 标识符

        标识符可以简单的理解为一个名字,用来标识变量名、常量名、函数名以及数组名等。在C语言中,标识符可以设定容易理解的名字,但要遵循一定的规则。具体规则如下:

        1、所有标识符都必须以字母或下划线开头,不能以数字或符号开头。

        2、在设定标识符时,除了开头外,其他位置可以由字母、下划线、数字组成。

        3、区分大小写。

        4、标识符不能是关键字。关键字是定义一种类型所使用的特殊字符,不能使用关键字作为标识符。

        5、标识符的命名最好具有相关的含义,即见名知义。

        6、ANSI标准规定,标识符可以是任意长度,但外部名必须至少能由前六个字符唯一的区分,并且不区分大小写。

1.3 数据类型

        C语言中有多种不同的数据类型,包括基本数据类型、构造类型、指针类型和空类型等,下图是C语言数据类型的组织结构,再对每种数据类型进行相应的讲解。

1.3.1 基本数据类型

        基本数据类型,包括整型、字符型、实型(浮点型)和枚举类型。例如:

1.3.2 构造类型

        构造类型就是使用基本数据类型的数据,或者使用已经构造好的数据类型,通过添加、设计、构造出新的数据类型,使设计的新构造类型满足待解决问题所需要的数据类型。

        通过构造类型的说明可以看出,它并不像基本数据类型那样简单,而是由多种类型组合而成的新类型,其中的每个组成部分称为构造类型的成员。构造类型包括数据类型、构造体类型和共用体类型3种。例如:

 1.3.3 指针类型

        指针类型不同于其他类型,其特殊性就在于指针的值表示的是某个内存地址。例如:

int *p  //指针类型

1.3.4 空类型

        空类型的关键字是void,其主要的作用包括两点:

        1、对函数返回值的限定。

        2、对函数参数的限定。

        也就是说,一般一个函数都具有一个返回值,将其返回给调用者。这个返回值应该具有特定的类型,如整型。但是,当函数不必返回一个值时,就可以使用空类型设定返回值的类型。例如:

1.4 常量

        常量就是其值在程序运行过程中不可以改变的数值。所有的常量分为三大类。

        1、数值型常量:整型常量和实型常量。

        2、字符型常量。

        3、符号常量。

     1.4.1 整型常量

        整型常量是指直接使用的整型常数,如0、-100、20等。整型常量可以分为长整型、短整型、符号整型和无符号整型。

        在编写整型常量时,可以在常量的后面加上符号L或U进行修饰。L表示长整型,U表示无符号整型。

1.4.2 实型常量(浮点型常量)

        实型常量是由整数部分和小数部分组成。表示实型常量的有两种方式:

        1、小数表示法

        小数表示法就是使用十进制的小数方法描述实型常量,如:

   2、指数表示

        有时实型常量非常大或非常小,使用小数表示不利于观察,这时就可以使用指数显示,其中,使用字母e或E进行指数显示。例如:

        在编写实型常量时,可以在常量的后面加上符号F或L进行修饰,其中F表示单精度类型,L表示双精度类型。例如:

        注意:如果不在常量的后面加上后缀,默认实型常量为双精度类型

1.4.3 字符型常量

        字符常量与前面介绍的常量不同,即要对字符型常量使用指定的定界符进行限制。字符型常量有两种:字符常量和字符串常量。

        1、字符常量

        字符常量是使用一对英文单引号括起来的一个字符。例如'A','b','1'等都是正确的字符常量。

        注意:

        (1)字符常量中只能包含一个字符。

        (2)字符常量区分大小写。

        (3)这对单引号是定界符,不属于字符串常量中的一部分。

        2、字符串常量

        字符串常量使用一对双引号括起来的若干字符序列。如果在一个字符串中一个字符都没有,则将其称为空字符串,此时字符串长度是 0。例如:""。在C语言中存储字符串常量时,系统会在字符串常量的末尾自动加上一个"\0"作为字符串常量结束标志。例如,字符串常量"welcome"在内存中的存储形式如下图所示:

        注意:在程序编写字符串常量时,不用在字符串常量的末尾加上"\0"结束字符,系统会自动添加。

1.4.4 转义字符

        转义字符在字符常量中是一种特殊的字符,转义字符是以反斜杠"\"开头的字符,后面跟一个或多个字符。常用的转移字符及其含义如下表:

 

1.4.5 符号常量

        使用一个符号代替固定的常量值,就是符号常量。例如下面代码中的PAI就是一个符号常量。

#include <stdio.h>
#define PAI 3.14
int main(){
    double fRadius;//半径变量
    double fResult = 0;//结果变量
    printf("请输入圆的半径:");
    scanf("%lf",&fRadius);
    fResult = fRadius * fRadius * PAI;
    printf("圆的面积是:%lf\n",fResult);
    return 0;
}

         运行结果是:

1.5 变量

        变量就是在程序运行期间其值可以变化的。每个变量都有一种类型,每种类型都定义了变量的格式和行为。数据各式各样,要先根据数据的类型为它申请一块合适的空间。C语言中的变量类型有整数变量、实型变量和字符型变量。

1.5.1 整型变量

        整型变量是用来存储整型数值的变量。整型变量可以分为6种类型,如下图所示:

      说明:[]为可选部分。

        下图列出整型变量的长度和取值方位范围:

  

注意:在编写程序时,定义所有变量的步骤应该在变量的赋值之前,否则会报错。通过下面两段代码进行对比。

1.5.2 实型变量

        实型变量也称为浮点型变量,由整数和小数部分组成。在C语言中,实型变量根据实型的精度还可以分为单精度、双精度和长双精度三种类型。如下:

         

        1、单精度类型

        定义单精度类型变量所使用的关键字是float,它在内存中占4个字节。使用如下:

      注意:在为单精度类型变量赋值时,需要在数值后面加f,表示该数值的类型是单精度,否则默认是双精度类型。

        2、双精度类型

        定义双精度类型的所使用的关键字是double,它在内存中占8个字节,使用如下:

1.5.3 字符型变量

        字符型变量是用来存储字符常量的变量。把一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。字符型变量在内存中占1个字节,取值范围-128~127。定义一个字符型变量的方法是使用关键字char。使用如下:

         说明:字符数据在内存中存储的是ASCII码值,即一个无符号整数,其存储形式与整数的存储形式一样,因此,C语言允许字符型数据与整型数据之间通用。例如:

        以上介绍了整型变量、实型变量和字符型变量,三种类型变量所使用的关键字、占用字节和取值范围如下:

 1.6 变量的存储类别

        在C语言中可以选择变量的不同存储形式,可以分为静态存储和动态存储。静态存储是指在程序运行期间分配固定的存储空间,而动态存储是指程序运行期间根据需要动态的分配存储空间。可以通过存储形式来告诉编译器要处理什么类型的变量,主要有自动(auto)、静态(static)、寄存器(register)、外部(extern)4中变量。

1.6.1 auto变量

        auto关键字用来修饰一个局部变量为自动的,每次执行到定义该变量的代码时,都会产生一个新的变量,并且对这个变量重新进行初始化。

        例如下面代码,在AddOne()函数中定义一个auto型的整型变量iInt,在其中对变量进行加1操作。之后在主函数main()中通过显示的提示语句,可以看到调用了两次AddOne()函数的输出。从结果中可以看到,在AddOne()函数中定义整型变量时系统会为其分配存储空间,在函数调用结束时自动释放这些存储空间。

#include <stdio.h>
void AddOne(){
    auto int iInt = 1;
    iInt = iInt + 1;
    printf("%d\n",iInt);
}
int main(){
    printf("第一次调用:");
    AddOne();
    printf("第二次调用:");
    AddOne();
    return 0;
}

运行结果如下:

注意: 关键字auto是可以省略的。如果不特别指定,那么局部变量的存储方式默认为自动的。

1.6.2 static变量

        static变量为静态变量,将函数的内部和外部变量声明为static变量的意义是不一样的。不过对于局部变量来说,两者的作用域都是仅限于声明变量的函数中,但在语句执行期间,static变量将始终保持它的值,并且初始化操作只在第一次执行时起作用。在随后的运行过程中,变量将保持语句块上一次执行时的值。

#include <stdio.h>
void AddOne(){
    static int iInt = 1;
    iInt = iInt + 1;
    printf("%d\n",iInt);
}
int main(){
    printf("第一次调用:");
    AddOne();
    printf("第二次调用:");
    AddOne();
    return 0;
}

1.6.3 register变量

         register变量称为寄存器存储类变量。使用register变量的目的在于让程序员把指定的某个局部变量存放在计算机的某个硬件寄存器中,而不是存放在内存中。这样做的好处是以提高程序的运行速度。用户无法获取寄存器变量的地址,因为绝大多数计算机的硬件寄存器都不占用内存地址。而且,即使编译器忽略register而把变量存放在可设定的内存中中,也是无法获取变量的地址的。

        例如,使用register变量修饰整型变量,代码如下:

#include <stdio.h>
int main(){
    register int iInt;
    iInt = 100;
    printf("%d\n",iInt);
    return 0;
}

1.6.4 extern变量

         extern变量称为外部存储变量。extern声明了程序中将要用到但尚未定义的外部变量。通常,外部存储类都用于声明在另一个转换单元中定义的变量。一个工程是由多个C源文件组成的。这些源文件分别编译,然后链接成一个可执行模块。把这样的一个程序作为一个工程进行管理,并且生成一个工程文件来记录所包含的所有源文件。

        例如,创建 两个C源文件Extern1.c和Extern2.c,现在Extern1.c文件中定义了一个iExtern变量,并为其赋值;然后在Extern2.c文件中使用iExtern变量,并将其变量值显示到控制台。

        

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

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

相关文章

第四届辽宁省大学生程序设计竞赛(正式赛)(12/13)

AC情况 赛中通过赛后通过暂未通过A√B√C√D○E○F√G√H√I○J√K—L√M√ 整体体验 easy&#xff1a;ABFHL mid&#xff1a;MJGC hard&#xff1a;IDKE 心得 感觉出了一堆典题&#xff0c;少数题还有些意思&#xff0c;E题确实神仙 题解 A. 欢迎来到辽宁省赛&#x…

bff层解决了什么痛点

bff层 -- 服务于前端的后端 什么是bff&#xff1f; Backend For Frontend&#xff08;服务于前端的后端&#xff09;&#xff0c;也就是服务器设计API的时候会考虑前端的使用&#xff0c;并在服务端直接进行业务逻辑的处理&#xff0c;又称为用户体验适配器。BFF只是一种逻辑…

基于爬行动物算法的无人机航迹规划-附代码

基于爬行动物算法的无人机航迹规划 文章目录 基于爬行动物算法的无人机航迹规划1.爬行动物搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用爬行动物算法来优化无人机航迹规划。 …

Python|OpenCV-图像的添加和混合操作(8)

前言 本文是该专栏的第8篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 在使用OpenCV库对图像操作的时候,有时需要对图像进行运算操作,类似于加法,减法,位操作等处理。而本文,笔者将针对OpenCV对图像的添加,混合以及位操作进行详细的介绍说明和使用。 下面,…

03、SpringBoot + 微信支付 ---- 创建订单、保存二维码url、显示订单列表

目录 Native 下单1、创建课程订单保存到数据库1-1&#xff1a;需求&#xff1a;1-2&#xff1a;代码&#xff1a;1-3&#xff1a;测试结果&#xff1a; 2、保存支付二维码的url2-1&#xff1a;需求&#xff1a;2-2&#xff1a;代码&#xff1a;2-3&#xff1a;测试&#xff1a;…

python 之 sorted 函数

文章目录 sorted() 函数的语法返回值使用示例&#xff1a;示例 1&#xff1a;基本使用示例 2&#xff1a;指定降序排序示例 3&#xff1a;使用 key 参数进行自定义排序 注意事项&#xff1a; sorted() 是 Python 中的一个内置函数&#xff0c;用于对可迭代对象进行排序&#xf…

jquery之checkbox全选反选提交参数

实现效果 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Checkbox操作示例</title><script src"https://code.jquery.com/jquery-3.5.1.min.js"></script><script>$(document).ready(…

FPGA高端项目:图像缩放+GTP+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持

目录 1、前言免责声明本项目特点 2、相关方案推荐我这里已有的 GT 高速接口解决方案我这里已有的以太网方案我这里已有的图像处理方案 3、设计思路框架设计框图视频源选择ADV7611 解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择…

【数据结构与算法】JavaScript实现哈希表

文章目录 一、哈希表简介1.1.认识哈希表1.2.哈希化的方式1.3.解决冲突的方法1.4.寻找空白单元格的方式线性探测二次探测再哈希化 1.5.不同探测方式性能的比较1.6.优秀的哈希函数快速计算均匀分布 二、初步封装哈希表2.1.哈希函数的简单实现2.2.创建哈希表2.3.put(key,value)2.4…

时间序列预测模型实战案例(七)(TPA-LSTM)结合TPA注意力机制的LSTM实现多元预测

论文地址->TPA-LSTM论文地址 项目地址-> TPA-LSTM时间序列预测实战案例 本文介绍 本文通过实战案例讲解TPA-LSTM实现多元时间序列预测&#xff0c;在本文中所提到的TPA和LSTM分别是注意力机制和深度学习模型,通过将其结合到一起实现时间序列的预测&#xff0c;本文利用…

Google发布移动终端对象检测模型——mediapipe,无GPU依然飞快

对象检测模型最出名的当选YOLO系列,其YOLO系列已经更新到V8系列,但是现有的YOLO模型面临限制,如量化支持不足和准确性延迟权衡不足。 YOLO-NAS模型在包括COCO、Objects365和Roboflow 100在内的知名数据集上进行了预训练,使其非常适合生产环境中的下游对象检测任务。YOLO-NA…

unity【动画】脚本_角色动画控制器 c#

首先创建一个代码文件夹Scripts 从人物角色Player的基类开始 创建IPlayer类 首先我们考虑到如果不挂载MonoBehaviour需要将角色设置成预制体实例化到场景上十分麻烦&#xff0c; 所以我们采用继承MonoBehaviour类的角色基类方法写代码 也就是说这个脚本直接绑定在角色物体…

Quartz之JDBC-JobStoreTX配置

一、前言 上篇 《Quartz介绍》中使用的是RAMJobStored存储调度信息&#xff0c;当进程终止调度信息会丢失&#xff0c;本篇我们介绍使用JDBCJobStore来存储调度信息&#xff08;jobs、Triggers和日历&#xff09;。 二、Quartz 表结构 可以从官网&#xff08;http://www.qua…

康耐视深度学习ViDi-ViDi四大工具介绍与主要用途

Cognex ViDi 工具是一系列机器视觉工具&#xff0c;通过深度学习解决各种难以解决的挑战。虽然这些工具共享一个引擎&#xff0c;但它们在图像中寻找的内容不同。更具体地说&#xff0c;在分析单个点、单个区域或完整图像时&#xff0c;每个工具都有不同的侧重点。 Locate&…

JUC并发编程系列(一):Java线程

前言 JUC并发编程是Java程序猿必备的知识技能&#xff0c;只有深入理解并发过程中的一些原则、概念以及相应源码原理才能更好的理解软件开发的流程。在这篇文章中荔枝会梳理并发编程的基础&#xff0c;整理有关Java线程以及线程死锁的知识&#xff0c;希望能够帮助到有需要的小…

30、JAVA进阶——Socket编程

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:乐趣国学的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者成长之路 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:JAVA进阶——Socket编程 更多内容点击👇 …

idea2023 PoJie以后无法修改内存无效

1. 打开电脑环境变量 2. 找到对应pojie文件 vmoptions目录 3. 修改这个文件 添加或者修改配置 -Xms128m -Xmx8192m4. 重启idea 修改成功

flutter开发报错The instance member ‘widget‘ can‘t be accessed in an initializer

文章目录 问题描述问题原因解决方法 问题描述 The instance member ‘widget’ can’t be accessed in an initializer. 问题原因 “The instance member ‘widget’ can’t be accessed in an initializer” 错误是因为在初始化器列表中&#xff08;constructor initializer…

JavaScript使用正则表达式

正则表达式(RegExp)也称规则表达式(regular expression)&#xff0c;是非常强大的字符串操作工具&#xff0c;语法格式为一组特殊字符构成的匹配模式&#xff0c;用来匹配字符串。ECMAScript 3以Perl为基础规范JavaScript正则表达式&#xff0c;实现Perl 5正则表达式的子集。Ja…

Linux常用命令——cdrecord命令

在线Linux命令查询工具 cdrecord Linux系统下光盘刻录功能命令 补充说明 cdrecord命令用于Linux系统下光盘刻录&#xff0c;它支持cd和DVD格式。linux下一般都带有cdrecord软件。 语法 cdrecord(选项)(参数)选项 -v&#xff1a;显示刻录光盘的详细过程&#xff1b; -eje…