大家好,今天小编关注到一个比较有意思的话题,就是关于c语言只接收的问题,于是小编就整理了4个相关介绍c语言只接收的解答,让我们一起看看吧。
- 为什么要用C语言中的结构体?我感觉它有些难,不用的话有什么后果?
- 书上说C语言函数的参数分形参和实参两种,它们有什么分别?使用时要注意什么?
- C语言的一些宏后面会加零,define n+0,为什么要加零呢?有什么意义?
- 都说C语言的指针很难,用不好很容易出错,那为何还要用指针呢?你能举例说说吗?
为什么要用C语言中的结构体?我感觉它有些难,不用的话有什么后果?
看应用场景,像单片机开发是不需要用结构体的,定义几个简单的变量就能解决。如果是网络通讯开发,不用结构体,自己去填充char数组,那是要吐血的。比如IP头,就是一个结构,收到报文,用IP头结构体一指,就能轻易取出各个字段。要不然只能按段长度一段一段解析。
结构体是很重要的。char,int,long等都是固定的长度及确定的类型,结构体是按需要定制的类型,里面可以内嵌你需要的东西,控制起来更灵活也更方便。其实就是对象的思想,要慢慢体会它的用法。更高级语言里的class是结构体进一步进化,功能更完善。可以说如果没有结构体,那么复杂程序看上去将一塌糊涂,枯燥无味。
用结构体最大好处是方便对数据的规划分类,第二简化数据操作,例如有一个结构体数组,在传递参数时非常方便,但若不用结构体数组,直接变量传递的话直接让人崩溃,第三若再接合指针,让结构体编程如虎添翼,简捷明了程序更易读昜懂不说,还可能会增加效率。第四,在二进制文件的存取上,利用结构体更是超级方便。
C语言的结构体是非常重要的语法,毕竟当初祖师爷发明C语言的其中一个首要任务就是要能提供数据的结构化。题主觉得结构体难,估计是因为初学C语言的缘故。
还记得刚开始接触 C 语言的时候,为了描述一个平行四边形的边长和对角线长,我定义了四个变量:短边长 a,长边长 b,对角线1长 d1,对角线2长 d2。
在写代码的中,发现又要定义一个平行四边形,于是我不得不又定义了四个变量:a2,b2,d12,d22,结果变量又多又乱,写代码很不舒服,太容易弄混了。当时我还想,幸好没有第三个,第四个平行四边形。
后来,我发现原来 C语言原来还有结构体这种语法,不禁感叹当初我那种做法实在是太笨了。
C语言初学者最先接触到的数据类型大多都只具有单一的值,例如,字符,真***值,小数,在C语言中(或者说编程语言中)这些数据类型通常被称作基本数据类型。
事实上,C语言中还有复合数据类型,那什么是复合数据类型呢?实际上,你可能已经用过复合数据类型了:由许多字符组成的字符串,就是典型的符合数据类型。
复合数据类型,其实就是由基本类型组成的数据类型。本节打算介绍的结构体也是一种复合数据类型,我们不讨论结构体的定义,直接看实例:
用 C 语言制定一个描述平行四边形边长和对角线长的结构体数据类型。
这个需求是容易实现的,我们用 double 类型来描述“长度”,那么结构体可以如下定义:
书上说C语言函数的参数分形参和实参两种,它们有什么分别?使用时要注意什么?
谢邀。
在我之前的问答里,我介绍了怎样定义自己的函数,并且给出了例子。
不过,示例自定义的函数既没有返回值,也没有参数,但是实际应用中,要解决复杂的问题,函数应该能够根据外界的输入做出相应的变化。
例如,我们需要打印出 4+6 的值,相关的C语言函数可以如下定义:
的确,add 函数能够打印出 4+6 的值,解决了问题。但是,可能还会有类似,但不相同的问题出现,比如需要打印出 3+4 的值,这时上面定义的 add 函数就没有办法解决问题了,只能重新定义一个函数,这就非常麻烦了。
事实上,C语言中的函数可以接收外界传入的数据,我们如下修改 add 函数:
这样,add 函数解决的就不是一个问题了,而是一类问题,打印 4+6 的值只需调用 add(4, 6),打印出 3+4 的值,只需调用 add(3, 4)。
C语言的一些宏后面会加零,define n+0,为什么要加零呢?有什么意义?
谢邀。
在阅读 Linux 内核源码时,发现了两个宏,相关的C语言代码如下,请看:
这两个宏接收一个结构体参数,该结构体的C语言定义如下:
这两个宏可以提供“原子操作”级的读数据操作。一开始看到这个宏的时候,我搞不懂为何要在最后“+0”,不过仔细想想,这么做至少有两个好处。
首先,在 atomic_read() 宏定义后“+0”可以避免 atomic_read() 宏被当作“左值”。根据改宏的名字,应该能够知道它是“原子的”读取,而一个被读取的数据再做“左值”显然是不合适的,如果没有后面的 “+0”,下面这样误写的C语言代码,编译器是不会报错的:
当然,也可以使用下面这样的宏定义避免 atomic_read() 宏被当作左值:
都说C语言的指针很难,用不好很容易出错,那为何还要用指针呢?你能举例说说吗?
1. 分析问题
整个问题,从提问者的角度,等价于两个子问题:
子问题1:为什么C语言要引入指针?
子问题2:指针怎么才能用好?
现在来分析子问题1。要回到这个问题,要回顾计算机程序的执行原理:
现代通用计算机基本上都遵循冯·诺依曼结构。
冯·诺依曼结构的精髓在于:将计算机指令与数据一视同仁,都放入内存中处理。所以计算机程序执行的过程,实际上就是不断从内存中取出指令,再从内存中取出数据,指令作用于数据得到结果,结果再放回内存的过程。
从这个过程可以看出,程序的整个运行都是围绕内存进行的。既然指令和数据都放在内存中,那么执行哪条指令、取哪个数据、结果放到哪里,都需要精确定位内存的具体[_a***_]。
C语言作为开发Unix操作系统而创造出来的编程语言,天然需要具备操作系统底层的能力;而从上述程序运行的视角来看,所谓的系统底层能力,核心在于对内存位置的定位能力。C语言用于对内存进行定位的“武器”就是指针。
一言以蔽之:C语言之所以引入指针,是由C语言诞生的历史背景和所要承载的历史使命决定的——开发操作系统,要用强大的操控系统底层的能力,系统底层的核心是对内存的定位操作。
很多同学被指针搞懵的原因在于:大陆的C语言入门的教材基本上都是谭浩强的《C语言程序设计》,这本教材讲述指针过于繁琐,没有抓住指针的本质。