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

关于C语言本质的一些思考

最近自己在使用vscode+clangd读S5PV210开发板X210的内核代码以及驱动代码,自己对C语言的操纵有了一些思考,特此记录下来,可能没有逻辑性(非针对解决某一个问题)只是简单的记录自己的一些思考以及对c语言的加深认识,希望对大家有所帮助。

(1)为什么都说C语言是面向过程的语言,而Java或者Python这些语言是面向过程的语言呢?

我认为面向过程或者面向对象更倾向于编程思想,C语言中有大量面向对象的数据结构以及函数算法,但是我们不能说C语言是面向对象的语言。学习某种语言的关键就是对关键字的学习,C语言的关键字中没有任何一个是面向对象的,而Java和Python中有某些关键字例如class本身含义就带有面向对象的思想,如果利用这些关键字编写代码写出来的代码自然而言就是面向对象的了。所以总结说“某种编程语言是不是面向对象的语言,关键在于关键字”,而面向对象是一种编程思想,与语言是没有太多必然联系的。

(2)程序=数据结构+算法,这句话的理解。

程序是有数据+对应操纵函数构成的,数据是静态的,对应内存格子以及内存格子中的内容,是不会自己轻易发生变动的,如果想要变动数据的内容,就需要用的函数,在函数内部用过"赋值运算符="左值写操作,右值读操作完成。也就说要想读写数据,需要调用某一个函数,在该函数内部“{}”内部使用赋值运算符实现,函数就是一个动态过程,这里的动态指的是对数据的读写操作,这些读写操作是要放到某一个函数内部实现的。

(3)函数就是一个数据处理器,这句话的理解。

首先,数据我的理解是分为2种:常量和变量。常量就是程序中的宏值对应的数字以及字符串,还有就是容易忽略的地址值,因为无论什么类型的变量编译加载到内存中后对应的地址是不会变的,可以理解为变量名是唯一的,常量就只能去读它了,不能改变他。变量顾名思义就是可以改变的量,也可分为2类:普通变量和指针变量,普通变量容易理解就是int、float、struct、union、数组等定义的变量,指针变量较为特殊,这个变量存储的值是一个地址值,而且一般写入后(写入某个地址)就不会轻易再次进行写操作,这就是指针变量和真实变量的“绑定关系”(一旦绑定就不会轻易改变),因为如果再次写另外一个地址值后,就不能访问原先绑定的变量了。

(4)关于数据存在的意义。

我认为数据存在的意义在于对其读操作。数据首先要定义某一个变量,然后在写入有效数值,最后再去读它(读操作才是目的,变量的归途)。可能有些同事会想到寄存器,寄存器的确有时候无需程序读它,只需要写入有效数值。我们可以理解为寄存器在代码写入有效数值后,是硬件电路完成读操作。普通的变量如果只定义,那是没有任何意义的。同样的定义变量后,只是写入有效数值也没有意义的。数据真正的价值(或归途)就是写入有效数值后去读出来,然后根据根据里面的内容去直到接下来工作(例如赋值给另外一个变量,参与各种算术、逻辑运算,参与if switch分支语句、参与while for do-while循环语句等)。

(5)赋值运算符“=”

赋值运算符“=”在程序中无处不在,有些还是隐藏的,例如函数传参以及返回值返回。赋值运算符“=”的特点就是效率很高,但是无法处理复杂的数据结构(当然linux内核某些代码中也直接用结构体变量传参,以及赋值操作,编译器不报错,但是不常用,也不推荐)。赋值运算符的这种特点就决定了函数传参的时候为什么要使用对应指针变量了。因为指针变量占4字节,赋值运算符能够轻易完成赋值操作。而且有了指针变量就可以通过解引用“*”,“->”实现对数据本身或者结构体成员的访问。

(6)再谈指针变量

指针变量也是变量,要想有意义,也是需要先定义,然后写入某一个地址(与某个变量或者函数绑定,轻易不会在写),最后再通过指针变量解引用或者-》实现读操作。指针变量一般只会写一次,可以读好多次。通过指针变量用的最多的是读绑定的变量的内容或者结构体变量的内容,这就是输入型参数(指针变量),也可以通过指针变量去写绑定的变量或者变量成员,这就是输出型参数(输出型指针变量)。

http://www.dtcms.com/a/323693.html

相关文章:

  • PAT 1053 Path of Equal Weight
  • 力扣-41.缺失的第一个正数
  • 三极管在电路中的应用
  • 如何有效追踪您的关键词搜索排名
  • USRP B210 N210 X310 参数对比
  • Vue3 生命周期
  • 【文献阅读】我国生态问题鉴定与国土空间生态保护修复方向
  • 3.5.1_2 信道划分介质访问控制(下)
  • Java 大视界 -- Java 大数据在智能家居场景联动与用户行为模式挖掘中的应用(389)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘fastai’问题
  • TSMASTER二次开发:TSMaster_On_Event_Demo.py解析
  • 深度学习之张量
  • ros2 单线程与多线程
  • MySQL相关概念和易错知识点(4)(分组查询、连接查询、合并查询、子查询)
  • M8-11 RFID模块通过RS485转Profinet网关与PLC通信的配置指南
  • springboot 2.4跨域变化和swagger结合的问题
  • 智能的本质
  • 递归---记忆化搜索
  • 前端Web在Vue中的知识详解
  • 【MySQL】事务的基本概念
  • 智慧物流仓储分拣:陌讯多模态识别方案让准确率↑29.3% 实战解析
  • js零基础入门
  • 零基础-动手学深度学习-10.1. 注意力提示
  • vs2022编译Activemq
  • AnyDesk远程工具免费版,v9.5.110绿色便携版,秒连远程桌面,剪贴板同步超实用
  • 网络管理实战
  • B.10.01.6-DDD领域驱动设计:从理论到落地的完整指南
  • 【LLM实战|langgraph】langgrpah基础
  • WD5030A 芯片,24V降12V,输出电流15A,高度集成实现高效能与低成本的完美平衡
  • 如何免费配置各类AI API_Key?(附接入后测试)