《c语言深度剖析》整理--符号

C语言深度解剖 PDF 分享 链接:https://pan.baidu.com/s/1U-8L7ZY5_sLpk4p0J302Mg           提取码:d8nu 相关推荐 [Objective-c程序设计] 中文编程·学习进阶_易语言 Windows API开发详解 函数、接口、编程实例 Programming in ... 阅读详情
 

一、注释符号

      c语言的注释符号有两种 /*...*/ 和 //

    1.   以下几种注释的形式:

      A)int/*...*/i;
      B)char* s="abcdefgh //hijklmn";
      C)in/*…*/t i;

      解析:

      A 正确,编译器再编译代码之前将注释符号替换为空格 ,等价于 int      i;

      B正确,此处字符串中的 //  为普通的字符常量;

      C错误,编译器再编译代码之前将注释符号替换为空格 ,等价于 in       t  i;

    2、/* */ 不支持嵌套,/* 总是与之后的最近的 */ 结合

         比如  /* test/* test */ test*/ 编译错误

    3、宏定义#define 定义的注释符号

       下面的例子:
       #define BSC //
       #define BMC /*
       #define EMC */
      D),BSC my single-line comment
      E),BMC my multi-line comment EMC

      解析:
      D和E都是错误,因为编译器编译的时候,注释先于预处理指令被处理,编译器先将注释替换为空格,之后再进行预处理#difine 定义的替换为宏中定义的,

      当这两行被展开成//…或/*…*/时,注释已处理完毕,此时再出现//…或/*…*/自然错误.因此,试图用宏开始或结束一段注释是不行的。

     4.  当进行除法运算,除数为 指针所指的值的时候,注意容易解析为注释符号而报错

         比如 y = x/*p  , 此处编译器将/* 当做是一段注释的开始 /* 而报错,解决此问题的最好的办好是,好不吝啬 括号,而避免引起误解y = x/(*p)

     5. 添加注释几个重要的规范

        (1)对于全局数据(全局变量、常量定义等)必须要加注释;

                 因为全局变量一般是程序中多处函数要引用,若不加注释,容易引起混淆;

        (2)注释采用英文,尽量避免在注释中使用缩写,特别是不常用缩写;

                不同平台不同的编译器,中文注释容易引起乱码

        (3)边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要及时删除;

        (4)对一系列的数字编号给出注释,尤其在编写底层驱动程序的时候(比如管脚编号);

        (5)注释的位置应与被描述的代码相邻,可以与语句在同一行,也可以在上行,但不可放在下方。同一结构中不同域的注释要对齐;

                 函数的注释一般放在代码上方;函数中语句的注释的比较长的注释一般放在代码上方,简短的注释可以放到代码的下方;

 二、接续符和转义符 \

         1.  接续符

           以下几个接续符的例子

           (1)//这是一条合法的\
                     单行注释

           (2)cha\
                     r* s="这是一个合法的\
                     字符串";

             解析: (1)(2) 都是可以正确的,可以编译通过

             接续符的使用原则:C 语言里以反斜杠(\)表示断行。编译器会将反斜杠剔除掉,跟在反斜杠后面的字符自动接续到前一行。但是注意:反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格。

            (1)(2)若接续符\  紧接之后加空格,编译器将不会看错是接续符而报错

            (1)(2)若接续符\ 第二行加空格,编译可以通过,但是编译器会认为第二行之前的空格是注释或者字符串的一部分,显然这种期望相悖;

         2. 转义字符 \

            常用的转义字符及其含义:
             转义字符转义字符的意义
            \n 回车换行
            \t 横向跳到下一制表位置
            \v 竖向跳格
            \b 退格
            \r 回车
            \f 走纸换页
            \\ 反斜扛符"\"
            \' 单引号符
            \a 鸣铃
            \ddd 1~3 位八进制数所代表的字符
            \xhh 1~2 位十六进制数所代表的字符

         C 语言字符集中的任何一个字符均可用转义字符来表示

          表中的\ddd 和\xhh正是为此而提出的。ddd 和hh 分别为八进制和十六进制的ASCII 代码。如\102 表示字母"B",\134 表示反斜线,\X0A 表示换行等。

三、单引号和双引号

        c中单引号和双引号含义不同,主要是表示的数据类型和内存中所占的空间不同,比如:

        1,'1',"1"
         第一个是整形常数,32 位系统下占4 个byte;
         第二个是字符常量,占1 个byte;
         第三个是字符串常量,占2 个byte。

        注:字符在内存里是以ASCAII 码存储的,所以字符常量可以与整形常量或变量进行运算。如:'A'+ 1 (B)

四、逻辑运算符  || 和&&

       ||  计算表达式,若前面表达式结果为真,整个表达式为真,将不再计算后面的表达式;

      &&计算表达式,若前面表达式结果为假,整个表达式为假,将不再计算后面的表达式;

     以上两点在程序设计的时候容易出错,比如

     1.  

  1. int i = 0;  
  2. int j = 0;  
  3. if((++i > 0) || (++j > 0))  
  4. {  
  5. }     

        结果:i=1;j=0。

五、++、--操作符、逗号表达式

       ++、--操作符,首先注意运算符前缀还是后缀表达式;

       几个++,-- 操作符的例子

      1. int i = 3;
         (++i)+(++i)+(++i);

        vs2008 编译的结果 18(不同的编译器编译的结果可能不同)

      2、int i = 3;
         (i++)+(i++)+(i++);

        vs2008 编译的结果 9(不同的编译器编译的结果可能不同)

       3.(1)

  1.  int i = 3;  
  2.  j =(i++,i++,i++);  
  3. (2)  
  1. int i = 3;  
  2.  =(i++,i++,++i);  

        解析:逗号表达式,遇到逗号后开始计算逗号之前的表达式的值,依次计算,直到最后的逗号,将计算的结果赋值给前面的变量(注:前缀表达式和后缀表达式计算到后面括号结果不同,以最后的逗号为准)

 (1)vs2008 编译的结果 5   (最后的结果等价于 int i = 5; j = i++;)

         (2)vs2008 编译的结果 6   (最后的结果等价于 int i = 5; j = ++i;)

        4. 逗号表达式的值取决于最后逗号以后表达式的值

  1. for(i=0, printf("First = %d", i);i < 10, printf("Second=%d",i); i++, printf("Third=%d", i))  
  2. {  
  3.     printf("Fourth=%d", i);  
  4. }  

    解析:此处程序为死循环

    i < 10, printf("Second=%d",i);   当i>=10时,printf("Second=%d",i); 函数返回的结果为真,所以整个逗号表达式的值为真,导致死循环

5.

  1. int i = 3;  
  2.  ++i+++i+++i;  

           此处 i 与符号 + 结合的原则是什么呢?

          贪心法:一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号
         所以,上面的表达式可以解析为 ((++i)++) +( i++) +i;

         vs2008 编译的结果 12(不同的编译器编译的结果可能不同)

C语言学习路线图PDF2021版 一、C语言学习路线前言 随着互联网及互联网+深入蓬勃的发展,经过多年的时间洗礼,C/C++语言俨然已成为“第一”语言,出色的性能使之成为高级语言中的性能王者。 这么牛的语言,你是不是想知道怎样学习和掌握它呢?接下来请看经过小编整理过C/C++学习路线思维导图。 博主已汇总成了一个十万字PDF版的C语言学习路线教程关注博主的微 信 公 众号 “C和C加加” 回复“PDF”即可获取!需要C/C++入门、进阶教程的回复“ZXC”即可获取! 二、C语言学习路线思维导图 1、环境篇(ubuntu.. 阅读详情

相关推荐

C语言深度剖析(带书签)

针对C语言中易被忽略的知识点,深度剖析,很棒的参考文档!请勿做商业用途。谢谢

C与C++中的常用符号与标点用法详解及实例

本文以实例,详细讲解了C及C++语言中的常用符号及标点所表达的意义、用法及注意事项。

billliu66的博客 3万+

C++坦克大战源代码

【代码】C++坦克大战源代码。

强国豪,林中霖 2609

C语言入门----输出语句

printf中的字符包括以下三种:以%开头的格式控制字符,以\开头的转义字符,普通字符。 双引号中出现一个%,后面一定要跟随一个输出常量,变量或表达式。 两个连续的%表示输出一个%。 一旦出现格式控制字符和转义字符,它们立即会寻找后面紧跟着的字符进行组合,但是它们前面的算普通字符。如: printf("a,%c\n",t); %c只能算一个字符,它会输出t中的字符。\n又算一个字符,它会输出回车

u013123943的专栏 4万+

DeepSeek 框架和技术栈分析

DeepSeek 诞生于对更高效、更强大的深度学习计算和模型训练的追求。随着深度学习模型的规模不断增大,如大型语言模型(LLMs)和复杂的视觉模型,传统的框架在处理这些大规模模型时面临着性能瓶颈和资源利用效率低下的问题。DeepSeek 旨在解决这些问题,通过优化框架设计和采用先进的技术栈,实现更高效的模型训练和推理,同时降低计算成本。

yournameplease的专栏 1512

Python实战:用MNE-Python从脑电数据中提取P300成分(附完整代码)

本文提供了一份使用MNE-Python从脑电数据中提取P300成分的完整实战指南。通过详细的代码示例,系统讲解了从环境搭建、数据加载、预处理(滤波、分段、伪迹剔除)到P300波形提取、可视化与参数量化的全流程。重点介绍了如何利用零相位滤波和叠加平均技术,从EEG信号中精准分离出反映认知加工的P300事件相关电位,适用于脑机接口与认知神经科学研究。

weixin_29240343的博客 338

C语言运算符号

C语言运算符号 分类: 1、算术运算符 2、关系运算符 3、逻辑运算符 4、位运算符 5、赋值运算符 6、杂项运算符 一、算术运算符 用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(–)共七种。 二、关系运算符 用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。 三、逻辑运算符 用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 与(&amp

奋斗的小伙伴呀 1万+

简单的服务器取证

记一次入门服务器取证——药品直销网,涵盖旧版本宝塔、静态IP的配置更改、代码的理解

m0_74559567的博客 3756

c语言中各个符号的含义总结,C语言中的符号总结

1、注释符号       //和/* ...*/2、续行符号         \3、转义符号       常用:\r 和 \n 等4、单引号 ‘括起来的一个字符代表整数5、双引号 “括起来的字符代表一个指针单引号 ‘括起来的一个字符代表整数...

weixin_34061241的博客 3万+

[ 虚拟专用网 ] IPsce 虚拟局域网(安全的IP协议的虚拟专用网)详解(二) --- 安全联盟SA

???? 博主介绍 ????‍???? 博主介绍:大家好,我是_PowerShell,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 ????点赞➕评论➕收藏 == 养成习惯(一键三连)???? ????欢迎关注????一起学习????一起讨论⭐️一起进步????文末有彩蛋 ????作者水平有限,欢迎各位大佬指点,相互学习进步! 目录 ???? 博主介绍 一、什么是安全联盟 二、协商参数两种方式:(手动、IKE) 1. 手动 2.

qq_51577576的博客 2802

【Android逆向工程】第18章:Ollvm 混淆与对抗

本章介绍了Ollvm混淆技术及其对抗方法。Ollvm是基于LLVM的开源代码混淆工具,主要实现控制流平坦化、虚假控制流和指令替换三种混淆技术。控制流平坦化通过状态变量和switch-case结构隐藏真实控制流,将原本清晰的逻辑拆分为多个状态块。混淆后的代码在静态分析中难以理解,但可通过动态追踪执行路径、符号执行等方法来还原原始逻辑。本章还提供了混淆代码示例和对抗策略,帮助理解Ollvm的工作原理及其防御方法。

w987333120的博客 213

C语言 —— 符号(C语言的基本符号)

C 语言的基本符号就有 20 多个,每个符号可能同时具有多重含义,而且这些符号之间 相互组合又使得 C 语言中的符号变得更加复杂起来。 符号 名称 符号 名称 , 逗号 &gt; 右尖括号 . 圆点 ! 感叹号 ; 分号 | 竖线 : 冒号 / 斜杠 ? 问号 \ 反斜...

杰儿__er 的博客 3万+

Valgrind 从入门到精通:内存调试和性能分析

Valgrind 提供了强大的 API,允许开发者编写自定义的检查工具。通过扩展 Valgrind,可以针对特定场景实现更精准的检测。

大模型大数据攻城狮的专栏 1217

C语言深度剖析-读书简记

陈正冲的《C语言深度剖析. 第2版》这本书确实不错,对C语言中的一些易错和重要的知识点进行了深度剖析,碰巧在网上看到这篇博客,对这本书中的关于C语言的一些易错的和重要的知识点做了一些整理,故转载过来,以便后续查阅。

hijack00的博客 2985

200Gb/s以上速率的通道信号完整性设计和优化经验(二)

为满足200Gb/s信号完整性需求,需综合优化PCB、连接器、封装及SERDES架构。关键措施包括:采用低粗糙度铜箔与低损耗材料降低传输线损耗(200G目标0.55–0.6dB/cm);通过背钻工艺控制残桩长度至4±2mil;缩减连接器焊盘残桩至600μm以内以消除谐振;封装层面推进跳层走线、低Dk/Df材料与可控SMT工艺;采用PAM4调制与基于ADC/DSP的混合信号架构实现高效均衡。先进CMOS工艺(如纳米片器件)支撑复杂数字处理,协同设计是突破速率瓶颈的核心。

小孟同学的博客 148

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C语言深度剖析学习心得之关键字

学习陈正冲得《C语言深度剖析》后,将学习笔记整理于此,方便自己查阅,其中知识部分来自原书,部分来自自己补充和实验,无任何商业目的,仅为学习讨论。感谢陈老师,有问题可到其blog:http://blog.youkuaiyun.com/dissection_c,进行讨论咨询 关键字 register变量必须是一个单个的值,长度应小于或等于整型的长度,不可能存放在内存中,不能用&。 s

tjlakewalker的专栏 1128

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【C语言】深度剖析数据在内存中的存储

万字详解! 掌握数据的“存”与“拿”,修炼内功心法!

Pursue quality, not quantity. 797

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《c语言深度剖析》整理--预处理

一、宏定义      1. 宏定义的作用域         宏定义开始,到文件结束(其他的文件包含宏定义的文件也可引用)。      2. 宏定义可增加代码的可读性          #define ERROR_POWEROFF -1          若不采用宏定义的方式,代码中出现-1 时,程序的可读性变差,代码中出现有具体的含义的单独的数字(比如上面-1) 称为魔鬼数,别人阅读代码

xyk_code的专栏 511

C语言再学习1——32个关键字

1 . 简述 工作这段时间虽然也调试一些程序,但很多时候还是停留在了模块,基础之上,缺乏系统的锻炼,同时工作中的定位现在更多是硬件,感觉慢慢的还是要转到嵌入式上来,才会有一些竞争力,能够了解底层的硬件,也明白程序的运行。硬件如果做得比较专,比较深,也是有很强的竞争力,反观自己,更多是打基础,学习一些跟产品设计相关的知识,以后也就想在有余力的时候,再把 C 语言系统的复习学习一下,过去的知识过于零散...

霁风AI 6823

C语言编译处理深度剖析

C语言编译处理是一个复杂但精巧的系统工程, 它像一座精心设计的工厂流水线, 将人类可读的高级语言代码转化为机器能高效执行的指令. 从预处理器的文本处理, 到编译器的深度分析和优化, 再到汇编器和链接器的精密装配, 每个阶段都有其独特的数据结构、算法和设计哲学正如计算机科学家Niklaus Wirth所言: “程序 = 算法 + 数据结构”, 而编译器正是将这一公式转化为可执行现实的关键桥梁. 掌握编译原理, 你将在软件开发的殿堂中拥有更深刻的洞察力和更强大的解决问题的能力。

X 530

《C语言内核深度解析》笔记(1):c语言与内存

《嵌入式Linux与物联网开发——C语言内核深度解析》这本书很适合新人嵌入式工程师学习,这本书有两个推荐的点:第一个是以嵌入式的视角重新解读C语言,在实际硬件和应用场景下重新讲解相关概念;第二个是补充了很多关于嵌入式c语言的细节,这些细节在工作中常见,但在课堂上不会讲。接下来一段时间我会把之前做的笔记陆续整理发出来,当作个人一次复习的小结。 第01章 c语言与内存 1.2 程序:数据+算法 静态内存SRAM和动态内存DRAM: SRAM:性能高,速度快,昂贵,如CPU的一级缓冲、二级缓冲 DRA

wangxiaobeia的博客 4978

取模 与 取整,多语言双平台详解取模方向,含推导过程

多种取整方式,会对取模产生很多不同的影响,为什么不同代码语言对于同样的操作会产生不同的结果?取模方式究竟是如何确定的?本篇博客会详细解答。

qq_45966201的博客 1283

c语言“或”符号

c语言中或符号为“||”,它是c语言中的逻辑运算符,意思为当左右两个表达式只要一个为真,就返回为真。或运算符不仅适用于c语言,还适用于Java、PHP、C#等编程语言。

yangda1111的专栏 398

C语言初学者自学整理了一天的函数栈帧的创建和销毁,求康康ヾ(^▽^*)))

连学再写真的弄了一天,5000字,求康康,求捞捞ヾ(≧▽≦*)o

weixin_62234287的博客 1349

你真的了解C语言吗 (深度剖析C语言第一期)_c语言深度 剖析第一

首先我们需要了解具有存储能力的设备,寄存器,cache,内存,硬盘,软盘……距离CPU越近的存储单元,效率越高,单价成本越高。距离CPU越远的存储单元,效率越低,单价成本越低。对于任何一种硬件而言,它都充当这自己上游硬件的缓存,因此,CPU访问数据的时候以最小的成本达到最高的效率。register修饰变量register修饰变量就是尽量将该变量放入CPU的寄存器中,从而达到提高效率的目的。哪些变量适合用register修饰呢?1.局部变量。

2401_84297944的博客 617
上一篇: 文件IO小结整理
下一篇: 《c语言深度剖析》整理--关键字
xyk_code
博客等级 码龄15年 3粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值