重拾C语言基础知识

如何在两台电脑间,实现zotero文件和数据两种类型的双向同步 在完成本文配置后,可以在两台不同的电脑间,通过两步简单操作实现zotero数据和文件的双向同步,并且全程免费首先,打开zotero->编辑->首选项->高级->文件与文件夹,配置链接附件根目录以及数据存储位置,前者将pdf文件通过相对地址形式存于zotero中(而非真正的pdf文件),后者则是设置用户本地数据的地址建议设置在数据盘D盘,可以避免后续对盘名的修改(因为基本每个电脑都存在C盘和D盘)然后,同一页面下,打开同步,配置数据以及文件同步方式。数据同步保持默认即可,文件同步选择WebDav,然后去坚果云 阅读详情

从实习到工作两年多的时间了,虽然感觉学到了很多知识,但是事实上却将立足之本的基础知识给忘了个精光。也许跟自己没有出去找工作有关,没有好好的将C语言的基础牢牢掌握。

从现在开始吧!好好的重温基础,做一名合格的程序猿!!!!

题目一 参数传递的值传递和其它传递

  1. void GetMemory( char *p)  
  2. {  
  3.     p = (char *) malloc( 100 );  
  4.     strcpy( p, "hello world" );  
  5. }  
  6.   
  7. void main(void)  
  8. {  
  9.     char *str=NULL;  
  10.     GetMemory(str);  
  11.     puts(str);  
  12. }  
这个程序是否有错?

从main函数开始,可以看到首先是定义了一个char类型的指针str,然后调用了GetMemory函数,此函数的参数是char 类型的指针。当函数中运行

 p = (char *) malloc( 100 ); 

的时候,是把分配的地址赋值给了P,而此时p所指向的地址和str所指向的地址并不同了。所以整个操作的过程中实际上进行的是值传递而不是地址的传递。

    那么进一步思考这个问题的话,我们可以通过地址传递和引用传递的方式进行改进程序。

  1. void GetMemory( char **p)  
  2. {  
  3.     *p = (char *) malloc( 100 );  
  4.     if (*p == NULL)
  5. return;
  6.     strcpy( *p, "hello world" );  
  7. }  
  8.   
  9. void main(void)  
  10. {  
  11.     char *str=NULL;  
  12.     GetMemory(&str);  
  13.     puts(str);  
  14. }  

题目二 编译器相关volatile

    编译器优化常用的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用CPU指令流水线,常见的是重新排序读写指令。volatile总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以消除一些代码。但有时这些优化不是程序所需要的,这时可以用volatile关键字禁止做这些优化。

volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。使用了volatile之后,每次在读取数据的时候都是从变量的地址处读取,而不是从cache中或者寄存器的备份中读取。

基于这种变量的特殊性,那么就应该合理使用,常见的应用场景:

1.中断服务程序中修改的供其它程序检测的变量需要加volatile

2.多任务环境下各任务间共享的标志应该加volatile

3.存储器映射的硬件寄存器通常也要加voliate,因为每次对它的读写都可能有不同意义

另:linux kernel中的内存屏障https://www.kernel.org/doc/Documentation/memory-barriers.txt

题目三 C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)

BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。

数据段 :数据段(data segment)通常是指用来存放程序中 已初始化 的 全局变量 的一块内存区域。数据段属于静态内存分配。 
代码段: 代码段(code segment/text segment)通常是指用来存放 程序执行代码 的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于 只读 , 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些 只读的常数变量 ,例如字符串常量等。程序段为程序代码在内存中的映射.一个程序可以在内存中多有个副本.
堆(heap) :堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc/free等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张)/释放的内存从堆中被剔除(堆被缩减)。堆(heap),堆一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
栈(stack) :栈又称堆栈, 存放程序的 局部变量 (但不包括static声明的变量, static 意味着 在数据段中  存放变量)。除此以外,在函数被调用时,栈用来传递参数和返回值。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。储动态内存分配,需要程序员手工分配,手工释放

下图是一个典型C内存空间分布图

题目四ARM体系中所描述的RO,RW和ZI
一个ARM程序包含3部分:RO,RW和ZI
  • RO是程序中的指令和常量
  • RW是程序中的已初始化变量
  • ZI是程序中的未初始化的变量
由以上3点说明可以理解为:
  • RO就是readonly,
  • RW就是read/write,
  • ZI就是zero
ARM映像文件的组成
所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。
Image文件包含了RO和RW数据。
之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。
Data-Structures-and-Algorithm-Analysis-in-Java.pdf 作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo... 立即下载

相关推荐

Unity游戏开发客户端面经——设计模式(初级)

Unity游戏开发客户端面经 之 设计模式 篇

Sea3752的博客 9431

重拾C语言(一)

初始C语言,Visual Studio 2013编译器使用,两数相加小程序程序,变量定义的方式,数据类型。

m0_56399733的博客 345

Claude Code 实战指南:用 AI 玩转终端编程,效率狂飙!

本文介绍了终端 AI 代理工具 Claude Code,涵盖常用命令、使用方法(如 init 初始化、权限配置、工作流程、上下文管理)、MCP 扩展工具及实战案例,展示其通过自然语言辅助开发的高效性与实用性。

个人技术 1万+

【重拾C语言】十二、C语言程序开发(自顶向下、逐步求精;结构化程序设计原则;程序风格)

在C语言程序开发中,可以使用自顶向下、逐步求精的方法解决问题,遵循结构化程序设计原则,同时注重良好的程序风格,这可以帮助开发者编写可读性强且易于维护的代码。

天地玄黄 魑魅魍魉 风花雪月 商角徵羽 1494

AIGC大模型应用教学平台

该平台采用最新的AI推理加速芯片,提供30Tops算力和32GB存储,能够运行常见的大语言模型如ChatGLM2、Llama2、Baicuan、Mistral等,也可以运行文生图扩散模型Stable Diffusion,提供大模型微调、量化、转换和加速推理服务。在此基础上,平台还提供常见的生成式AI应用,包括AIGC知识抽取增强(RAG)、AIGC绘画、AIGC会话聊天、数字虚拟人等应用,以便学生能够掌握最新的生成式AI模型微调、提示工程和智能体应用技能。

中智讯的博客 1207

从MIPS汇编到C语言:手把手教你用Mars模拟器理解指令集(附实战代码)

本文详细介绍了如何使用Mars模拟器从MIPS汇编过渡到C语言编程,通过实战代码解析ADD、LW、BEQ等指令集与C语言结构的对应关系。内容涵盖环境搭建、算术运算、内存访问、条件分支及函数调用等核心概念,帮助读者深入理解MIPS指令分类和计算机底层运行机制。

weixin_26821003的博客 357

重拾c语言系列第一辑--简单认识c语言及其基本语法

c语言,一门关于编程的高级语言。是许多程序员的“母语”。1972年,贝尔实验室里的丹尼斯里奇和肯汤普逊在开发unix操作系统时设计了c语言。经过了漫长岁月,c语言经历了许多考验,直到今天都可以畅快使用。他有几个特性:设计特性,高效性,可移植性,强大而灵活,面向程序员。这些都是他的优点。缺点是关于指针的使用还有大量运算符的叠加会让代码晦涩难懂。这个缺点甚至造就了国际c语言混淆代码大赛。接下来是使用c语言的7个步骤1.定义程序与目标2.设计程序3.编写代码4.编译5.运行程序6.测试和调试程序7.维护和修改代码

putcharrr的博客 403

保姆级教程:用STM32标准库搞定TIM1的PWM输出(附完整代码和避坑点)

本文提供STM32F103高级定时器TIM1的PWM输出保姆级教程,涵盖从工程搭建到完整代码实现的详细步骤。重点解析TIM1作为高级定时器的特殊配置要点,包括时钟初始化、PWM通道设置和GPIO复用功能,并附常见问题排查指南和动态调整占空比的实用技巧,帮助开发者高效实现精准PWM控制。

weixin_30673611的博客 433

重拾c语言

C语言基础知识汇总(一)

LSMXWLW的博客 201

华为od 面试八股文_前端_03_含答案

华为od 面试八股文_前端_03_含答案

MISAYAONE的博客 2130

【UVM实战】第一章:配置UVM环境(以VCS为例),跑通书上的例子(包括清理中间文件方法、使用DVE查看波形方法、命令执行原理探究)

如何配置UVM的VCS运行环境,运行书本上的例子呢?本节将会为你详细解答!

悟已往之不谏 知来者之可追 8137

迷茫之后 重拾C语言

         昨天我们学校考完了省二级考试,         同学们就把C语言丢了,          而我却深深喜欢上了他,         我决定再学C语言。        以后做单片机要用到C语言,        还有嵌入式也要,        所以我重拾C语言,每天写程序。        定期上传我的代码,        有问题的话,请各位不吝赐教。谢谢

ppcpp的专栏 700

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【学习记录】明解C语言(入门篇)CH3

本人毕业后就没有从事IT相关的工作了,在平淡如水且一眼望到头的工作中,突然发现了原来自己一直因为畏惧而逃避的原专业的有趣,现在正在重新捡起专业知识,就从C语言开始学起吧!

zey_saltyfish的博客 213

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IEM模型,地表粗糙度模拟

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

一个整数的阶乘c语言程序设计,1138: 【C语言训练】计算一个整数N的阶乘

本来我的基础比较薄弱,现在大三了,大一大二就没有好好的刷题,而且在大一的时候C语言还挂科了,足以见得我C语言学的有多渣,现在才想着刷题,说不后悔是假的,但是我就是想着说,总比一直不知道的要好,今天在杭电的网站上面看了题目,发现自己的能力还达不到那个境界,就跑到了学校的网站刷题,都是一些很基础的题目,想着慢慢来吧,也许我的博客里没有什么可以学习的,但是这应该是我的学习经历吧。题目描述计算一个整数N的...

weixin_29825411的博客 356

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

大学生计算机专业期间由迷茫转为清晰的简单经历

而在首要复习的编程语言方面,特别是C语言,在刚开学的时候就开了,但是觉得只是学了个皮毛,并没有彻底掌握相关知识及其应用,而且这门编程语言几乎是所有编程语言的基础,没有它的基础学直接学其它的编程语言一般都会比较困难的。我现在是一名大三学生,是学计算机专业的,未来也期待着可以从事这一类相关行业,在大一、大二时还没有意识到未来就业的艰难,每天一直在浑浑噩噩的过着,前段时间在看到就业方面的资讯才意识到问题的严重性,如果在毕业前不掌握一些技能和知识,那么毕业即失业!

m0_64580612的博客 91

C语言重拾(1)

C语言重拾(1)C语言重拾第2章 C语言概述2.2 示例解释2.2.2 程序细节2.6 多个函数2.8关键字和保留标识符第3章 数据和C C语言重拾 本科学过一点C语言,学得甚是马虎,恰好最近因为在学习STM32单片机,自觉C语言忘得太多,基础太差。所以结合C primer plus再过一遍C语言,重拾C编程技能。本系列文章会记录一些小的知识点以及学习中的疑问困惑及解决办法,流程就按照书的章节目录...

星际荒野的博客 480

重拾C语言(1)

现在的时间是2015年4月21日,晚上21点20分。第一次写技术博客(也许目前只能当作自我笔记总结而已)。        这学期正式开始学习嵌入式软件了,从很早之前就规划好,想去做一个优秀的嵌入式工程师。无奈大一和大二上学期实在是不学无术,现在游戏账号丢给女朋友了,心也好好收了收。是时候真正的开始我的程序员之路了!        言归正传。今天起,我开始复习C语言的任务,为日后的嵌入式

蹒跚学步 495

【C/C++】C语言特性总结

已经有大约半年的时间没有碰C语言了,当时学习的时候记录了很多的笔记,但是都是特别混乱,后悔那个时候,不懂得写博客,这里凭借记忆和零零散散的笔记记录,尝试系统性地复习一下C语言。 之前都是在Windows环境下学习,这次把重心放在Linux环境下,这次的复习源于基础,但是要高于基础。 文章目录工具gcc编译器VS2019C语言编译过程C语言代码主体必要内容C语言数据类型关键字常量变量进制表示s...

明月沉江春雾晓 4万+

重拾C语言

计算机专业学生,大学两年虽然学过C语言、C++和数据结构,但是没认真听,不会写代码,老师也因为课时有限只讲了一部分知识。当初选计算机也是因为觉得计算机适合我,现在要重新学习C语言,培养编程能力。目标就是成为一名合格的程序员,有能力去互联网公司工作。最想进的互联网公司是字节跳动。 计划是每天花3个小时在编程上,具体内容是学习C语言基础,然后找编程题,上机写代码,不懂就在网上找教程学习或者问同学老师。 ...

qq_52088961的博客 336

C语言基础拾取

记录教材重点,誊写个人理解,记录学习步骤 文章目录前言1.什么是C语言?1.1对于我个人而言C语言是什么?2.1<了解程序>程序的灵魂—算法2.1.一个程序的基本构成2.2算法的概念2.3简单算法举例【例2.2.1】求求 1×2×3×4×5的值【例2.2.2】有 50 个学生,要求将他们之中成绩在 80 分以上者打印出来【例2.2.3】判定 2000 — 2500 年中的每一年是否闰年,将结果输出【例2.2.4】对一个大于或等于 3 的正整数,判断它是不是一个素数【例2.2.5】1-(1/2)

weixin_46358809的博客 563

重拾嵌入式,从c开始

毕业后干电力二次系统调试,基本不是出差就是在出差的路上,为了转行不出差,打算重新搞嵌入式。学了有两三天了,勾巴项目天天加班,只能说每天都尽可能学一点吧。(20260131)1.4代码运行需要一个入口,即main函数,注意一个工程文件仅允许有一个main,但是可以有多个.c源文件。1.1了解了vc2019的安装和项目的创建,选择“新建项目-空项目-创建源文件-自定义名称.c”先记录这些,有错误之处,还请见谅,我也只是个小白,学校学的基本忘干净了。1.5需要区分/n和\n的区别, \n才是转义符。

qq_65223528的博客 678

重拾C语言重要知识之C语言特征

(一) C语言的特点 (1)语言简洁、紧凑,使用方便、灵活。32个关键字、9种控制语句,程序形式自由。 (2)运算符丰富。34种运算符。 (3)数据类型丰富,具有现代语言的各种数据结构。 (4)具有结构化的控制语句,是完全模块化和结构化的语言。 (5)语法限制不太严格,程序设计自由度大。 (6)允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可直接对硬

imzgmc 457

重拾C语言重要知识之函数

概述  (1)一个C程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。对于较大的程序,通常将程序内容分别放在若干个源文件中,再由若干源程序文件组成一个C程序。这样便于分别编写、分别编译,提高调试效率。一个源程序文件可以为多个C程序公用。 (2) 一个源程序文件由一个或多个函数以及其他有关内容(如命令行、数据定义等)组成。一个源程序文件是一个编译单位,在程序编译时是以源程序

imzgmc 324

重拾C语言 Day1

第一次写博客,写的不好。。你来打我呀(2333333)。不多BB开始正文。 两年前开始接触编程,第一碰到的就是C 语言,讲真的当时,真的学不懂,应付应付考试,然后就稀里糊涂的学JAVA。呆呆的过了三年,马上就要从事编程工作了,想着把以前的东西都回顾一下,首先是C,然后是数据结构,接下来是操作系统,最后是Python。博主的大学比较垃圾所以,就教了C,剩下的东西都是博主自学的,今天开始,将进入回顾!...

qq_42583546的博客 233

重拾C语言,为嵌入式软件开发之路筑基

如今,站在职业生涯的起点,我深刻意识到实践技能的重要性,尤其是像C语言这样广泛应用于底层开发、操作系统、嵌入式系统等领域的基础语言。我的目标是:通过系统的学习,不仅能够熟练掌握C语言的语法特性,还能灵活应用于实际项目中,高效编写出满足需求的代码。- 第四阶段(总结与展望) :最后,我将对整个学习过程进行总结,梳理遇到的难点与收获,同时根据当前的技术趋势和就业市场需求,进一步规划后续的学习方向,比如深入学习Linux内核编程、RTOS(实时操作系统)开发等,为心仪公司的面试做好充分准备。

weixin_71792758的博客 274

重拾C语言基础 进阶成为JAVA小老板

哈哈哈哈哈哈哈哈哈哈哈哈 大家看到标题的时候可能会很疑惑 或者可能会嘴角抑制不住的想要说 啊?这! 其实想干这件事已经很久!!! 一、简单介绍自己情况: (1)双非一本 本科专业:电子信息工程 --->这妥妥的流氓专业啥都学 学啥都不精。 (当然也有博主自己的问题、懒!拖延症!也不是不爱学习就是 考前学渣 考试是就是努努力冲 本科给自己的要求就是不挂科(当然这个要求我做到了 顺带拿了奖学金) 但是学完就丢 不主动学习还是我自己的最大的问题 ) (2)毕业之后去了一家教育机构当老师,当然有很

weixin_46663959的博客 633
上一篇: MIPI DBI\DPI\DSI简介
下一篇: 内存管理、内存分配malloc、free、realloc,printf小结
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值