![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程语言:C语言高级
季末狂甩
这个作者很懒,什么都没留下…
展开
-
哈佛存储器结构和冯.诺依曼存储器结构
哈佛结构是将程序中的数据和指令分开来存储,这样数据和指令可以有不同的位宽冯诺依曼结构是将程序中数据和指令存储在同一个存储器的不同物理地址中,这样数据和指令必须保持一致的位宽...原创 2018-08-12 10:34:22 · 1619 阅读 · 0 评论 -
c语言中变量、函数的存储类、作用域、生命周期、连接属性间的关系
1、普通(自动)局部变量分配在栈上,作用域为代码块作用域,生命周期是临时,连接属性为无连接。定义时如果未显式初始化则其值随机,变量地址由运行时在栈上分配得到,多次执行时地址不一定相同,函数不能返回该类变量的地址(指针)作为返回值,因为没有意义。2、静态局部变量分配在数据段/bss段(显式初始化为非0则在数据段,显式初始化为0或未显示初始化则在bss段),作用域为代码块作用域(人为规定的),生命周...转载 2018-08-23 11:37:13 · 285 阅读 · 0 评论 -
带参宏、函数、及内联函数
带参宏即为带有参数的宏定义,要注意的是,在书写带参宏时一定要给每一个参数带括号,并给表达式整体带括号。如求a,b中较大者:#define MAX(a,b) (((a)>(b))?(a):(b))众所周知,宏定义是在预处理阶段由预处理器对所定义的宏进行原地展开的,而预处理器是不带参数检验功能的,所以带参宏无法对其参数进行校验,这是它的一个缺陷。同时对它的处理是原地替换,所以不存在传参...原创 2018-08-20 14:54:59 · 557 阅读 · 0 评论 -
c语言中定义变量的几个关键字
1.auto(1)auto关键字在C语言中只有一个作用,那就是修饰局部变量。(2)auto修饰局部变量,表示这个局部变量是自动局部变量,自动局部变量分配在栈上。(既然在栈上,说明它如果不初始化那么值就是随机的······)(3)平时定义局部变量时就是定义的auto的,只是省略了auto关键字而已。可见,auto的局部变量其实就是默认定义的普通的局部变量。2.static(1)stati...转载 2018-08-23 10:44:21 · 16383 阅读 · 0 评论 -
函数的传参问题
首先要明白为何函数要进行参数传递?为了实现程序中各功能的模块化,将各个功能模块单独地写成一个函数,在主函数或其他要用到该功能模块的函数中去调用该函数,从而达到程序中功能的模块化,提高整个程序的可读性。那么被调函数和主调函数之间如何进行信息通讯呢?就要通过函数传参来实现。当然,也可以用全局变量来实现调函数和主调函数之间的信息传递,但是大量使用全局变量不利于整个程序的模块化,而且随着程序变得庞...原创 2018-08-17 15:06:00 · 722 阅读 · 0 评论 -
如何看待一维数组以及二维数组的数组名、首元素、数组地址
一维数组定义一个数组:int a[5];此处,a,&a[0]以及&a做右值时在数值上是完全相同的,但含义不同。数组名a只能做右值,不能做左值。做右值是表示数组首元素首的地址,同&a[0],如:定义一个int *类型指针int * p,此时p=a和p=&a[0]完全是一个效果,一个意思。&a[0]即数组首元素首地址,只能做右值,同数组名a做...原创 2018-08-17 10:21:25 · 2400 阅读 · 0 评论 -
offsetof宏和container_of宏
offsetof宏:已知类型为TYPE的结构体变量,并且知道其内部有一个成员为MEMBER,在未知结构体变量指针的情况下求MEMBER成员与该结构体变量首地址之间的偏移量。#define offsetof(TYPE,MEMBER) ((int)&((TYPE *)0)->MEMBER) container_of宏:已知已知类型为type的结构体变量...原创 2018-08-19 22:04:18 · 114 阅读 · 0 评论 -
转自:博客园.海子《 结构体字节对齐》http://www.cnblogs.com/dolphin0520/。
http://www.cnblogs.com/dolphin0520/本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...转载 2018-08-19 19:27:16 · 168 阅读 · 0 评论 -
c语言字符串和字符数组的区别
在函数中定义一个字符串,char *s = "asdfgh",相当于在代码段申请了7个连续的字节的内存空间用以存储字符串"asdfgh"(为何是7个字节,因为字符串末尾还有一个'\0'字符,加上字符串本身的6个字符,共占7个字节),同时在栈中定义一个字符指针s,即char * s,并将这7个字节组成的这段内存的首地址赋值给s,即将字符'a'的内存地址赋值给s。在函数中定义一个字符数组,ch...原创 2018-08-19 11:55:05 · 13675 阅读 · 2 评论 -
c语言程序中用来存储变量的三种内存
c语言程序中变量存储在三种类型的内存中:栈内存、堆内存、数据段内存一.栈内存,用来存储程序中各个函数的局部变量(动态局部变量),特点:1.不用程序员手动申请和释放内存,由编译系统自动分配与释放;2.内存是脏的,内存中内容是随机的,如果在定义局部变量时未显式初始化该变量,则变量的值是不确定的;3.栈内存的生长模式是向下生长的(高地址向低地址),且变量存储与取出时遵循先进后出的原则;...原创 2018-08-19 11:03:58 · 1877 阅读 · 0 评论 -
c语言中对变量的理解
要知道变量是存储在内存中的,所谓定义一个变量其实就是分配一块内存空间,并给这个内存空间起一个名字。所以变量的实质是一个内存空间的名字、代号。而这块内存空间具有其自身的一些属性:空间长度(字节数)、空间地址、空间中的内容(要存储什么二进制数据)。空间长度是由定义变量时的变量类型所指定的,空间地址是编译器为变量分配这个空间时随机分配的,空间内容也是由变量类型指定的。如:int a; //...原创 2018-08-12 12:07:28 · 1398 阅读 · 0 评论 -
c语言中变量数据类型
c中变量数据类型有两个作用:指定变量所占内存的长度(n个字节);指定变量的解析方法(告诉编译器如何看待、理解这个变量)。1.指定变量所占内存的长度int a; //指定变量a所占内存为4个字节长度(32位机器中)2.指定变量所占内存的解析方法要知道所有的类型的数据存储在内存中,都是按照二进制格式存储的。所以内存中只知道有0和1,不知道是int的、还是float的还...转载 2018-08-12 11:52:46 · 1348 阅读 · 0 评论 -
计算机和计算机程序
计算机是什么?是用来计算的机器,它最主要的功能就是用来做计算(处理)的。那么它要计算什么东西呢?数据。哪里的数据?计算机程序中需要计算机去计算处理的数据。怎么进行计算处理这些数据?根据计算机程序中指定的指令去计算,比如程序中有“a=b+c”,则先计算“+”,再执行“=”。所以,计算机程序就包含两部分:数据和指导计算机如何处理数据的指令。数据就是数字,指令就是动作(其实本质上指令也是...原创 2018-08-12 11:27:30 · 363 阅读 · 0 评论 -
可重入与不可重入函数的区别
参考博客园:https://www.cnblogs.com/zhangjxblog/p/5009989.html转载 2019-05-28 09:18:37 · 573 阅读 · 0 评论