当前位置: 首页 > news >正文

C语言基础讲解一

文章目录

    • 1. 基本概念
        • 1.1 数据类型
          • 1.1.1 基本数据类型
          • 1.1.2 枚举类型
          • 1.1.3 指针类型
          • 1.1.4 派生类型
        • 1.2 变量
        • 1.3 常量
      • 总结
    • 2. 操作符与表达式
        • 2.1 算术操作符
        • 2.2 关系操作符
        • 2.3 逻辑操作符
        • 2.4 位操作符
        • 总结

1. 基本概念

在C语言中,基本概念涵盖了数据类型、变量和常量的定义和使用。让我们逐个详细讲解这部分的知识点:

1.1 数据类型

C语言中的数据类型可以分为基本数据类型、枚举类型、指针类型和派生类型。

1.1.1 基本数据类型

基本数据类型是C语言中最基础的数据表示形式,用于存储常见的数据。

  • int:整数类型,通常表示有符号整数。

    int number = 10;
    
  • char:字符类型,用于存储单个字符。在内存中以ASCII码形式存储。

    char letter = 'A';
    
  • float:单精度浮点数类型,用于存储小数,精度约为6位有效数字。

    float pi = 3.14;
    
  • double:双精度浮点数类型,比float精度更高,精度约为15-16位有效数字。

    double e = 2.71828;
    
1.1.2 枚举类型

枚举类型用于定义一组命名的整数常量。默认情况下,第一个枚举值的值为0,后续枚举值依次递增。

enum Day {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
enum Day today = Wednesday;

在上述示例中,Monday的值为0,Tuesday的值为1,以此类推。

1.1.3 指针类型

指针类型用于存储变量的内存地址,允许直接访问内存中的数据。

int *ptr;  // 声明一个整型指针
int num = 20;
ptr = #  // 将ptr指向num的地址
  • *ptr:解引用操作符,用于获取指针指向的值。

    int value = *ptr;  // value现在等于20
    
1.1.4 派生类型

派生类型包括数组、结构体、联合体和函数类型。

  • 数组:一组相同类型的数据元素的集合。

    int arr[5] = {1, 2, 3, 4, 5};
    
  • 结构体:允许存储不同类型的数据项。

    struct Point {int x;int y;
    };
    struct Point p = {10, 20};
    
  • 联合体:允许在相同的内存位置存储不同的数据类型。

    union Data {int i;float f;
    };
    union Data d;
    d.i = 10;  // 或者 d.f = 3.14;
    
  • 函数类型:用于声明函数返回值的类型。

    int add(int a, int b) {return a + b;
    }
    
1.2 变量

变量用于存储数据,在使用前需要通过数据类型和标识符进行声明和定义。

int a = 10;
char c = 'A';
float f = 3.14;
  • 声明:告诉编译器变量的名称和类型。

    extern int x;
    
  • 定义:为变量分配内存并指定初始值。

    int x = 5;
    
1.3 常量

常量是固定的值,在程序执行过程中不会改变。使用const关键字定义常量。

const int MAX = 100;

常量可以提高程序的可读性和维护性,因为它们的值在程序运行期间不能被改变。

总结

C语言中的基本概念包括数据类型、变量和常量。数据类型定义了变量可以存储的数据类型和范围。变量是程序中存储数据的容器,通过数据类型和标识符进行声明和定义。常量是不可改变的值,通过const关键字定义。理解和掌握这些基本概念是学习和编写C语言程序的关键步骤。

2. 操作符与表达式

在C语言中,操作符用于执行各种操作,包括算术操作、关系操作、逻辑操作和位操作。让我们详细讲解每种类型的操作符及其用法。

2.1 算术操作符

算术操作符用于执行基本的数学运算,如加法、减法、乘法、除法和取余。

int a = 5, b = 2;
int sum = a + b;      // 加法,sum的值为7
int diff = a - b;     // 减法,diff的值为3
int prod = a * b;     // 乘法,prod的值为10
int quotient = a / b; // 除法,quotient的值为2
int remainder = a % b; // 取余,remainder的值为1
  • 注意
    • 整数除法会截断小数部分,结果为整数。
    • 取余操作符(%)返回两个数相除的余数。
2.2 关系操作符

关系操作符用于比较两个值,并返回布尔值(1表示真,0表示假)。

int a = 5, b = 2;
int result = (a > b);   // 大于,result的值为1
result = (a < b);       // 小于,result的值为0
result = (a == b);      // 等于,result的值为0
result = (a != b);      // 不等于,result的值为1
result = (a >= b);      // 大于等于,result的值为1
result = (a <= b);      // 小于等于,result的值为0
  • 注意
    • ==!= 是比较相等和不相等的操作符。
    • 关系操作符的结果是布尔值,可以用于控制流程中的条件判断。
2.3 逻辑操作符

逻辑操作符用于执行逻辑运算,如逻辑与、逻辑或和逻辑非。

int a = 1, b = 0;
int result = (a && b);  // 逻辑与,result的值为0
result = (a || b);      // 逻辑或,result的值为1
result = (!a);          // 逻辑非,result的值为0(a为真,取非为假)
  • 逻辑与 (&&)

    • 当且仅当两个操作数都为真时,结果为真;否则结果为假。
  • 逻辑或 (||)

    • 当至少一个操作数为真时,结果为真;两个操作数都为假时,结果为假。
  • 逻辑非 (!)

    • 如果操作数为真,则结果为假;如果操作数为假,则结果为真。
2.4 位操作符

位操作符用于对整数在二进制级别执行操作,如按位与、按位或、按位异或、按位取反、左移和右移。

int a = 5, b = 2;
int result = a & b;    // 按位与,result的值为0
result = a | b;        // 按位或,result的值为7
result = a ^ b;        // 按位异或,result的值为7
result = ~a;           // 按位取反,result的值为-6(取反后的补码)
result = a << 1;       // 左移1位,result的值为10
result = a >> 1;       // 右移1位,result的值为2
  • 按位与 (&)

    • 对应位都为1时结果为1,否则为0。
  • 按位或 (|)

    • 对应位有一个为1时结果为1,都为0时结果为0。
  • 按位异或 (^)

    • 对应位不同时结果为1,相同时结果为0。
  • 按位取反 (~)

    • 对操作数的每一位取反(0变为1,1变为0)。
  • 左移 (<<)

    • 将操作数的所有位向左移动指定的位数,右侧空出的位用0填充。
  • 右移 (>>)

    • 将操作数的所有位向右移动指定的位数,左侧空出的位用原来的符号位填充(算术右移)。
总结

操作符是C语言中非常重要的部分,通过使用这些操作符可以进行各种数学计算、逻辑判断和位级操作。理解这些操作符的使用和行为是编写高效和功能丰富的C语言程序的基础。

相关文章:

  • 刷代码随想录有感(110):动态规划——完全背包问题
  • Linux远程访问及控制
  • SkyWalking 极简入门
  • 小程序中用font-spider压缩字体后,字体没效果(解决办法)
  • 异地如何共享视频文件?
  • 指定GPU跑模型
  • 易优cms远程调试
  • CDN缓存命中率较低可能的原因
  • 无人机校企合作
  • Python学习笔记15:进阶篇(四)文件的读写。
  • vue 中实现用户上传文件夹的功能
  • 容器基本概念_从虚拟化技术_到容器化技术_开通青云服务器_并远程连接_容器安装---分布式云原生部署架构搭建007
  • 通过MindSpore API实现深度学习模型
  • 聚合大模型场景助力产业升级,WAIC 2024 容联云论坛即将开幕
  • 一键掌控,4G红外插座引领智能生活新潮流!
  • golang 发送GET和POST示例
  • input实现文字超出省略号功能
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • MySQL数据库运维之数据恢复
  • OSS Web直传 (文件图片)
  • python docx文档转html页面
  • Zepto.js源码学习之二
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • -- 数据结构 顺序表 --Java
  • 微信小程序开发问题汇总
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 异步
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​Spring Boot 分片上传文件
  • ​力扣解法汇总946-验证栈序列
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #QT(一种朴素的计算器实现方法)
  • $$$$GB2312-80区位编码表$$$$
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4)STL算法之比较
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (HAL库版)freeRTOS移植STMF103
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (蓝桥杯每日一题)love
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)linux 命令大全
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .net core 的缓存方案
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • @RequestBody的使用