- 博客(15)
- 收藏
- 关注
原创 C语言:编译和链接
在ANSI C的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。第2种是执⾏环境,它⽤于实际执⾏代码。翻译环境由和⼀个C语⾔的项⽬中可能有多个.c⽂件⼀起构建,那多个.c⽂件又是如何进行的呢?•多个.c⽂件单独经过编译器,编译处理⽣成对应的⽬标⽂件。•注:在Windows环境下的⽬标⽂件的后缀是.obj,Linux环境下⽬标⽂件的后缀是.o•多个⽬标⽂件和链接库⼀起经过链接器处理⽣成最终的可执⾏程序。•。
2024-03-28 20:42:59 1023 1
原创 C语言:文件操作
我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出 操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流 想象成流淌着字符的河。每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区,⽤来存放⽂件的相关信息(如⽂件的名字,⽂件状态及⽂件当前的位置等)。⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或 者输出内容的⽂件。根据⽂件指针的位置和偏移量来定位⽂件指针(⽂件内容的光标)。
2024-03-27 17:32:30 854
原创 浮点数在内存中的存储
对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。这个就是float类型对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。这个就是double类型。⼗进制的5.0,写成⼆进制是 101.0 ,相当于 1.01×2^2,。任意数如果用科学计数法表示,则一定可以表示成1.xxx *(进制)^E,既然这样,那么就规定E只存入小数点后面的数字,如上例子就是存入01。
2024-03-16 17:24:28 567 1
原创 内存操作函数memmove函数详解
函数声明:void * memmove ( void * dest, const void * src, size_t num );dest:指向要在其中复制内容的目标数组的指针,类型转换为 void* 类型的指针。src:指向要复制的数据源的指针,类型转换为 const void* 类型的指针。num:要复制的字节数。(size_t 是无符号整数类型)返回值: 返回dest的首地址。头 文 件:#include <string.h>
2024-03-13 23:37:20 470 1
原创 指针?干他!(4)
我们通过定义一个函数cmp,通过cmp返回的参数来确定排序规则,需要注意的是:cmp函数的参数需要以const void *a, const void *b的形式来定义,表示a和b的类型是未确定的,在return中进行强制类型转换为int型。返回值大于零,则表示元素1大于元素2,是为升序。我们可以写一个calc( )函数,将我们要选的计算方式传至进去,像是case 1 中的 calc(add),这样代码就简洁了许多。这是一个简单的计算器,但是你会发现框住的部分是完全一样的,比较冗余,那么怎么优化呢?
2024-03-06 17:09:37 360
原创 指针?干他!(3)
首先二维数组可以理解为将一维数组当作元素放在新的数组中,根据元素名是首元素地址,二维数组的数组名就是首元素也就是第一个一维数组的地址。也就是说二维数组传参本质上是传的地址。p先和*结合,说明p是⼀个指针变量变量,然后指着指向的是⼀个⼤⼩为10个整型的数组。所以 p是⼀个指针,指向⼀个数组,叫数组指针。顾名思义就是把函数的地址传给指针,与数组指针非常相似。好了,这次的分享就到这里,欢迎大家指正和评论!不难理解就是存放函数指针的数组,那要怎么写呢?今天我们继续学习指针。pc就是一个字符指针变量。
2024-03-06 15:54:59 350
原创 指针?干他!(2)
其中&arr[0]和arr都是指的首元素地址,+1之后指的是第二个元素的地址,数组中每个元素是int类型,占4个字节,8/4=12,在16进制中是c。而&arr和&arr+1相差16进制的18,换算成10进制是24,正好是数组的大小,说明(&)取地址的arr是一个数组。至于为什么&arr+1和arr+1里边的+1,同样是+1,为什么不一样,这里我先埋伏一波,往后说到指针类型的时候会提到。类比一下,存放整形的数组是整型数组,存放字符的数组是字符数组,那么说存放指针的数组是指针数组。
2024-03-05 17:41:25 334 1
原创 指针?干他!
我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的 数据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何 ⾼效的管理呢?那么如何理解地址呢?我们通过取地址操作符(&)拿到的地址是⼀个数值,⽐如:0x006FFD70,这个数值有时候也是需要 存储起来,⽅便后期再使⽤的,我们把这样的地址值存放在指针变量中。我们知道指针是存储地址的,地址有多大呢,这与计算机有关如果是32位机器,地址就是32位,64位机器地址就是64位。
2024-03-04 23:40:43 941 1
原创 C语言调试以及VS的使用技巧
在函数调⽤的地⽅,想进⼊函数观察细节,必须使⽤F11,如果使⽤F10,直接完成函数调⽤。因此arr[12]和i的地址一样,是同一个地址的不同表达,所以arr[12]赋值0,i也变成0并且符合循环条件,继续循环。2、Release 称为发布版本,它往往是进⾏了各种优化,使得程序在代码⼤⼩和运⾏速度上都是最优的,以便⽤⼾很好地使⽤。栈区内存的使⽤习惯是从⾼地址向低地址使⽤的,所以变量i的地址是较⼤的。F10:逐过程,通常⽤来处理⼀个过程,⼀个过程可以是⼀次函数调⽤,或者是⼀条语句。F9:创建断点和取消断点。
2024-01-31 18:03:23 346
原创 scanf函数中的\n操作符
因为\n必须后接一个非空字符,如果像p3一样,则要多输入一个数,但是多输入的这个数并不影响输出值。要想减去额外输入的部分,确保最后没有\n即可。在我们写编程的时候scanf函数中\n的位置不同会使后面输入值不同。而函数中\n在最后时,需要多输一个数。函数中没有\n时,只需要输入两个值。函数中\n在中间,只需要输入两个值。
2024-01-21 21:52:50 493
原创 自我与规划
众所周知,编程是有难度的,所以光靠课堂上老师讲的内容就像掌握它是不现实的。因此不仅要课堂上认真听,自己还要找时间练习。学习初期可能比较难,但是坚持肯定有收获,一定能让自己编程能力得到提高,从而进入到我想去的大厂——华为,字节。加入鹏哥C语言集训营是希望通过在寒假里的学习能对C语言有这大概的认识,能够按照自己的理解敲代码,我们这个专业下学期开设C语言课程,希望这个寒假提前赶赶进度。我是信息与计算科学专业的大一学生,平时喜欢听歌,动漫,乒乓球,羽毛球,性格比较随和,跟任何人都合得来,对计算机感兴趣。
2024-01-16 18:26:30 349 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人