c语言编程
文章平均质量分 72
qq_46116380
这个作者很懒,什么都没留下…
展开
-
程序环境和预处理
程序的翻译环境和执行环境在ANSIC的任何一种实现中,存在两个不同的环境1.翻译环境:源代码被转换为可执行的机器指令(即文本->二进制)2.执行环境:用于实际执行代码。(加载到内存)以下1-3都为翻译环境,4为执行环境1.预处理: 宏替换,去注释,头文件展开,条件编译2.编译:将c编译成汇编 (语法,词法分析,符号汇总)3.汇编:将汇编转成目标二进制文件4.链接:可执行程序.exe (链接时引入程序调用的函数)预处理1.预定义符号:__FILE__ 进行编译的原创 2021-11-14 20:46:40 · 217 阅读 · 0 评论 -
C语言文件操作(二)
1.文件的随机读取可以调整位置,想读写哪就读写哪1.1 fseek函数,设置光标位置根据文件指针的位置和偏移量来定位文件指针int fseek ( FILE * stream, long int offset, int origin );文本文件时,origin参数选择SEEK_SET 文件起始位置为偏移起始位置SEEK_ CURSEEK_END 文件末尾位置为偏移起始位置FILE * 指向的文件offset 偏移量origin 起始点 FI原创 2021-11-11 11:16:01 · 453 阅读 · 0 评论 -
c语言文件操作(一)
1. 为什么使用文件我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。2.什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)2.1程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。2.2数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从原创 2021-11-10 20:23:13 · 692 阅读 · 0 评论 -
C语言之动态内存管理,内存分配以及柔性数组使用
动态内存管理1.为什么存在动态内存分配我们以前常用的内存开辟方式:int n=20; 栈空间开辟四字节char a[10]={0}; 栈上开辟十个字节的连续空间上述开辟空间的方式有两个特点:1.空间开辟大小是固定的2.数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对空间的需求,不仅是上述情况。有时我们所需要的空间大小在程序运行的时候才能知道,那数组在编译时开辟空间的方式就不能满足了。这时候就只能试试动态开辟了。2.动态内存函数的介绍ma原创 2021-11-05 17:17:15 · 205 阅读 · 0 评论 -
C语言之枚举和联合
枚举1.什么是枚举?把可能的值列举出来。例如一周的星期一到星期日,可以一一列举。月份有12个月,可以一一列举。2.枚举类型定义enum Day { 枚举类型 Mon, 枚举常量 Tues, Wed, Thur, Fri, Sat, Sun };enum Color { 枚举类型 RED, 枚举常量 GREEN, BLUE };以上定义的enum Day 和 enum Color都是枚举原创 2021-11-01 21:29:48 · 182 阅读 · 0 评论 -
C语言之位段
位段:环境vs20171.什么是位段?位段的声明和结构是类似的,有两个不同:1.1 位段的成员必须是int ,unsigned int ,signed int ,char,必须是整形。1.2 位段的成员名后边有一个冒号和一个数字。struct A { int a : 2; int b : 4; int c : 10; int d : 30; }; printf("%d\n", sizeof(struct A));int a:2 代表a在32位中只占2原创 2021-11-01 19:30:23 · 110 阅读 · 0 评论 -
C语言之结构体内存对齐
C语言之结构体内存对齐我们已经掌握了结构体的基本使用,现在来深入探讨一个问题:计算结构体的大小。结构体大小的计算与结构体的内存对齐规则有关对齐数影响因素默认对齐数: windows默认8字节对齐预编译指令#pragma pack(n)手动设置 n–只能填1 2 4 8 16成员变量自身大小对齐数为上述三者中最小的值结构体对其规则:第一个成员在结构体变量偏移量为零的地址处。其他成员变量要对齐到对齐数的整数倍。结构体总大小为最大对齐数的整数倍。如果嵌套了结构体的原创 2021-11-01 16:40:58 · 116 阅读 · 0 评论 -
C语言之结构体初阶
1.什么是结构体?结构体是一些值的集合,这些值成为成员变量。结构体的每个成员变量可以是不同类型的变量。结构体一般是某类事物其属性的集合。例如,学生这个类型,通常会有,名字,学号,性别,年龄等。2.结构体的声明结构声明struct tag{ member-list;}variable-list;结构体成员类型:结构体的成员可以是标量,数组,指针,甚至是其他结构体例如一个学生:struct Stu{ char name[20]; int age; ch原创 2021-11-01 11:33:14 · 281 阅读 · 0 评论 -
C语言之浮点形在内存中的存储问题
1.引入问题作为一个引子,我们先来看一个简单的代码。 int n = 9; float *pfloat = (float *)&n; printf("n的值:%d\n", n); printf("*pfloat的值:%f\n", *pfloat); *pfloat = 9.0; printf("num的值为:%d\n", n); printf("*pfloat的值为%f\n", *pfloat); 根据该例,说明浮点型数的读取和存储与整形是不一样的。2.原创 2021-10-09 20:02:43 · 279 阅读 · 0 评论 -
C语言整形在内存中的存储问题
整形在内存中的存储问题1. 整形家族char (1字节) : unsigned char signed char short(2字节): unsigned short signed short int (4字节): unsigned int signed int long(8字节) : unsigned long signed short3. 如何存储:计算机中都是以二进制形式存储的计算机中的有符号数有三种表示方式,即原码,反码,补码。符号位0表示原创 2021-09-27 21:24:56 · 105 阅读 · 0 评论 -
c语言一个数的二进制有几个1
实现一个函数的二进制有几个11.方法一:利用除法和取余,如下图所示:int NumOf1(int x) { int count = 0; while (x) { if (x % 2 == 1) { count++; } x /= 2; } return count; }int main() { int num = 11; int n = NumOf1(num); printf("%d的二进制中有几个1:%d\n", num, n); return 0; }原创 2021-09-27 15:40:57 · 149 阅读 · 0 评论 -
c语言交换两个数字的三种方法
写函数实现交换两个数字1.方法一:创建临时变量int swap(int *x, int *y) { int temp = 0; temp = *x; *x = *y; *y = temp;}int main() { int a = 10; int b = 5; printf("before:a=%d b=%d\n", a, b); swap(&a, &b); printf("after:a=%d b=%d\n", a, b); return 0; }原创 2021-09-24 15:17:32 · 3496 阅读 · 0 评论