必一体育官网一步一步学习C语言基础知识入门(图例解析)

2023-10-26 20:51:09
浏览次数:
返回列表

  必一体育官网一步一步学习C语言基础知识入门(图例解析)C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课!

  博主已将这些基础知识汇总成了一个视频版的C语言基础知识大全添加博主的微 信 号 备注【GGG】不备注不给通过即可获取!需要C/C++(linux内核)入门、进阶教程的备注【GGG】即可获取!

  C语言规定,标识符可以是字母(A~Z,a~z)、数字(0~9)、下划线_组成的字符串,并且第一个字符必须是字母或下划线。在使用标识符时还有注意以下几点:

  变量就是可以变化的量,而每个变量都会有一个名字(标识符)。变量占据内存中一定的存储单元。使用变量之前必须先定义变量,要区分变量名和变量值是两个不同的概念。

  格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置从计算机上显示。

  博主已将这些基础知识汇总成了一个PDF版的C语言基础知识大全关注博主的微 信 公 众号 “C和C加加” 回复“PDF”即可获取!

  在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为

  数据类型和表达式都必须加括号, 如把(int)(x/2+y)写成(int)x/2+y则成了把x转换成int型之后再除2再与y相加了。

  更多Linux内核源码高阶知识请加开发交流Q群篇【318652197】获取,进群免费获取相关资料,免费观看公开课技术分享,入群不亏,快来加入我们吧~

  前100名进群领取,额外赠送一份价值699的内核资料包(含视频教程、电子书、实战项目及代码)

  其中表达式表示循环条件,执行代码块为循环体。while语句的语义是:计算表达式的值,当值为线)时, 执行循环体代码块。

  它先执行循环中的执行代码块,然后再判断while中表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。

  **父循环一次,子循环需要全部执行完,直到跳出循环。**父循环再进入下一次,子循环继续执行…

  C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。在复合语句中也可定义变量,其作用域只在复合语句范围内。

  静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。

  动态存储方式:是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储区中存放的变量是根据程序运行的需要而建立和释放的,通常包括:函数形式参数;自动变量;函数调用时的现场保护和返回地址等。

  在C语言中不能被其他源文件调用的函数称谓内部函数 ,内部函数由static关键字来定义,因此又被称谓静态函数,形式为:

  这里的static是对函数的作用范围的一个限定,限定该函数只能在其所处的源文件中使用,因此在不同文件中出现相同的函数名称的内部函数是没有问题的。

  在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为:

  C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数,因此当需要定义外部函数时extern也可以省略。

  数组只声明也不行啊,看一下数组是如何初始化的。说到初始化,C语言中的数组初始化是有三种形式的,分别是:数据类型 数组名称[长度n] = {元素1,元素2…元素n};

  mtianyan: 如果采用第一种初始化方式,元素个数小于数组的长度时,多余的数组元素初始化为0;

  2.数组的遍历数组就可以采用循环的方式将每个元素遍历出来,而不用人为的每次获取指定某个位置上的元素,例如我们用for循环遍历一个数组:

  strlen()获取字符串的长度,在字符串长度中是不包括‘\0’而且汉字和字母的长度是不一样的

  strcmp()在比较的时候会把字符串先转换成ASCII码再进行比较,返回的结果为0表示s1和s2的ASCII码相等,返回结果为1表示s1比s2的ASCII码大,返回结果为-1表示s1比s2的ASCII码小

  strcat在使用时s1与s2指的内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串

  定义了一个名称为num,数据类型为int的二维数组。其中第一个[3]表示第一维下标的长度,就像购物时分类存放的购物;第二个[3]表示第二维下标的长度,就像每个购物袋中的元素。

  C语言最核心的指针说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解。

  因为一旦上千行,经常出现各种莫名其妙的内存错误,一不小心就发生了 coredump...... 而且还无从排查,分析不出原因。

  相比之下,那时候最喜欢 Java,在 Java 里随便怎么写都不会发生类似的异常,顶多偶尔来个

  直到后来对内存和指针有了更加深刻的认识,才慢慢会用 C 写上千行的项目,也很少会再有内存问题了。(过于自信

  「指针存储的是变量的内存地址」这句话应该任何讲 C 语言的书都会提到吧。所以,要想彻底理解指针,首先要理解 C 语言中变量的存储本质,也就是内存。

  >

  每一个单元格都表示 1 个 Bit,一个 bit 在 EE 专业的同学看来就是高低电位必一体育官网,而在 CS 同学看来就是 0、1 两种状态。

  由于 1 个 bit 只能表示两个状态,所以大佬们规定 8个 bit 为一组,命名为 byte。

  这就相当于,我们给小区里的每个单元、每个住户都分配一个门牌号,在生活中,我们需要保证门牌号唯一,这样就能通过门牌号很精准的定位到一家人。同样,在计算机中,我们也要保证给每一个 byte 的编号都是唯一的,这样才能够保证每个编号都能访问到唯一确定的 byte。

  上面我们说给内存中每个 byte 唯一的编号,那么这个编号的范围就决定了计算机可寻址内存的范围。

  所有编号连起来就叫做内存的地址空间,这和大家平时常说的电脑是 32 位还是 64 位有关。早期 Intel 8086、8088 的 CPU 就是只支持 16 位地址空间,

  这点内存空间显然不够用,后来,80286 在 8086 的基础上将地址总线和地址寄存器扩展到了20 位,也被叫做 A20 地址总线。

  但是,现在的计算机一般都是 32 位起步了,32 位意味着可寻址的内存范围是2^32 byte = 4GB。

  上面只说明了 int 型的变量如何存储在内存,而 float、char 等类型实际上也是一样的,都需要先转换为补码。对于多字节的变量类型,还需要按照大端或者小端的格式,依次将字节写入到内存单元。

  编译器该如何区分一个 int 里你存的到底是 int 类型的值,还是另外一个变量的地址(即指针)。这如果完全靠我们编程人员去人脑记忆了,会引入复杂性,并且无法通过编译器检测一些语法错误。

  这就是指针存在的必要性。实际上任何语言都有这个需求,只不过很多语言为了安全性,给指针戴上了一层枷锁,将指针包装成了引用。

  这就是指针类型发挥作用的时候,编译器会根据指针的所指元素的类型去判断应该取多少个字节。如果是 int 型的指针,那么编译器就会产生提取四个字节的指令,char 则只提取一个字节,以此类推。

  f的位模式没有发生任何改变,变的只是解释这些位的方式。当然,这里最后的值肯定不是 1,至于是什么,大家可以去真正算一下。

  c是 short 类型只占两个字节,那肯定会访问到相邻后面两个字节,这时候就发生了内存访问越界。当然,如果只是读,大概率是没问题的。

  首先,我要说一句话,没有多级指针这种东西,指针就是指针,多级指针只是为了我们方便表达而取的逻辑概念。

  *a中的*表示a是一个指针变量,前面的int*表示指针变量a只能存放int*型变量的地址。对于二级指针甚至多级指针,我们都可以把它拆成两部分。

  offset不是直接和address相加,而是要乘以数组类型所占字节数,也就是:address + sizeof(int) * offset。学过汇编的同学,一定对这种方式不陌生,这是汇编中寻址方式的一种:基址变址寻址。看完上面的代码,很多同学可能会认为指针和数组完全一致,可以互换,这是完全错误的。尽管数组名字有时候可以当做指针来用,但数组的名字不是指针。

  变量名用来指代一份数据,数组名用来指代一组数据(数据集合),它们都是有类型的,以便推断出所指代的数据的长度。

  虽然在这里它指向的是一个数组,但数组也只是一块连续的内存,没有开始和结束标志,也没有额外的信息来记录数组到底多长。

  (2)二维数组大家不要认为二维数组在内存中就是按行、列这样二维存储的,实际上,不管二维、三维数组... 都是编译器的语法糖。

  博主已将这些基础知识汇总成了一个视频版的C语言基础知识大全加博主的微信号 备注【GGG】不备注不通过哦 加上微信后即可获取!更多C/C++(Linux内核)入门、进阶教程也可以添加博主微 信 号备注【GGG

搜索