C
fl_sw
呵呵
展开
-
宏,将一个数字的奇数位和偶数位交换
用宏定义的方式,将一个数的二进制形式数的奇偶位进行交换。 其实非常简单,步骤如下: 1.先将这个数左移一位,然后与0xAAAAAAAA相与,此时就保存了奇数位。 2.再将这个数右移一位,然后与0x55555555相与,此时就保存了偶数位。 3.最后将1,2两步的结果或一下,就得到了最终的结果。 代码是这样的://author:fl_sw//date://functio原创 2017-10-23 16:35:12 · 382 阅读 · 0 评论 -
C语言中字符串的几种定义方式和有没有’\0‘
( 主要解决 什么时候是 “abcd\0” 什么时候是 “abcd” 的问题 )几种常用方式: 1.char* str = “abcd”; 2.char str[] = { “abcd” }; 3.char str[] = { ‘a’, ‘b’, ‘c’, ‘d’ }; //要用户自己加入’\0‘,应为str[] = { ‘a’, ‘b’, ‘c’, ‘d’ ,’\0’}; 4.cha...原创 2018-08-12 00:22:37 · 45018 阅读 · 4 评论 -
程序环境和预处理
程序编译过程: 1.组成一个程序的每个源文件通过编译器进行编译分别转换成目标文件 2.每个目标文件由链接器链接在一起,形成一个单一的可执行程序 3.链接器会引入标准C库中的被该程序用到的函数,也可以搜索程序员个人的程序库,将程序需要的函数链接到程序中。 编译本身也分为几个阶段: 1.预编译(*.i) 预处理指令 2.编译(*.s) 语法分析,词法分析,语义分析,...原创 2018-08-22 11:32:27 · 183 阅读 · 0 评论 -
大端 / 小端,三种判断方法
1.什么是大端 / 小端? 2.为什么会有大小端之分呢? 3.怎么判断当前机器的字节序?什么是大端 / 小端? 大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中为什么会有大小端之分呢? 因为在计算机系统中,我们以字节为存储单元,每个地址单元都对应着一个字节...原创 2018-08-22 14:56:03 · 31369 阅读 · 11 评论 -
浮点数的存储解析
浮点数家族:float , double , long double 浮点数的表示范围:float.h中定义 常见的浮点数:3.14159,1e3根据国际标准IEEE(电器和电子工程协会)754,任意一个二进制浮点数V可以表示成下面这种形式:(-1)^S * M * 2^E (-1)^S表示符号位。当S=0,V位整数;当S=1,V位负数M 表示有效数字,大于等于1,小于2...原创 2018-08-22 16:28:59 · 5159 阅读 · 1 评论 -
volatile
先来看一段程序: const int num = 10; int *p = (int *)# *p = 20; printf("%d\n", num); //这里的输出结果是10上面这段程序中,定义const的num = 10,然后用一个指针指向它,修改它,打印它 不该是修改后的值吗? 逻辑上来说应...原创 2018-08-22 17:11:56 · 196 阅读 · 0 评论 -
腾讯笔试——安排机器 【 题目描述】小 Q 的公司最近接到 m 个任务, 第 i 个任务需要 xi 的时间去完成, 难度等级为 yi。 小 Q 拥有 n 台机器, 每台机器最长工作时间 zi, 机器等
安排机器 【 题目描述】小 Q 的公司最近接到 m 个任务, 第 i 个任务需要 xi 的时间去完成, 难度等级为 yi。 小 Q 拥有 n 台机器, 每台机器最长工作时间 zi, 机器等级 wi。 对于一个任务,它只能交由一台机器来完成, 如果安排给它的机器的最长工作时间小于任务需要的时间, 则不能完成,如果完成这个任务将获得 200 * xi + 3 * yi 收益。 对于一台机器,...原创 2018-08-28 11:50:55 · 4783 阅读 · 0 评论 -
c语言字符串处理函数模拟实现
int fl_strlen_1(const char* str){ int count = 0; while (*str != '\0') { count++; str++; } return count;}int fl_strlen_2(const char* str){ if (*str == '\0...原创 2018-08-24 16:40:42 · 263 阅读 · 0 评论 -
柔性数组
C99中,结构体中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员typedef struct st_type { int i; char a[0];}type_a;或者:typedef struct st_type { int i; char a[];}type_a;柔性数组的特点:1.结构中的柔性数组成员前面必须至少一个其他成员。2.sizeof 返回的...原创 2018-09-27 16:15:06 · 146 阅读 · 0 评论 -
scanf()
scanf()是一个具有多种用途的输入函数,他从标准输入流stdin读取数据并把数据存储在参数列表指定的变量中。它可以读取所有的内置数据类型并将他们自动转化为适当的内部格式。 #include int scanf(const char* format,…);format指定的控制字符串由以下三类字符组成: 1.格式控制符 2.空白字符 3.非空白字符格式说明符...原创 2018-04-21 11:05:15 · 459 阅读 · 0 评论 -
结构体
声明结构体的一般形式: struct 结构体名 { 成员表列; }; 例如: struct Data //声明一个结构体类型 struct Data { int year; int month; int day; }; //花括号后的分号不能丢掉用定义的结构体类型来声明一个变量(birthday): struct D原创 2017-12-06 22:02:54 · 423 阅读 · 0 评论 -
简单用宏定义实现max(a,b)
求两个数的较大值,我们很容易用函数实现,其实当用宏定义实现时更加方便快捷,举个例子:“`include define MAX(a,b) (((a)>(b))?(a):(b))int main() { int i = 5, k = 11; printf(“%d \n”,MAX(i,k)); return 0; }“`原创 2017-10-23 11:50:38 · 10234 阅读 · 1 评论 -
C语言交换两个变量的值
交换a,b变量的值,最简单的方法,创建中间中间变量c,先把a的值存在c里,然后把b的值放入a内,最后把c中的值赋给a,就完成了a,b变量值的交换。代码如下:#include <stdio.h>//利用中间变量交换两个变量值int main(){ int iv = 0, a = 3, b = 7; printf("交换前a=%d b=%d\n", a,b); iv =原创 2017-09-19 21:05:19 · 2330 阅读 · 1 评论 -
c语言求解一元二次方程
在用c语言实现一元二次方程求解时,我们首先约定这个方程是AX²+BX+C=0的形式,接下来需要考虑的便是这个一元二次方程的参数问题。我们分三种情况讨论,当A=0,B=0时,这样的参数无法构成合适的方程;当A=0,B≠0时,这个方程是个一元一次方程;当A≠0时,构成一元二次方程。这三种情况中的逻辑我们用if语句很容易就可以实现。接下来我们就需要选择参数的类型,这里我们选择float类型,然后定义一个精原创 2017-09-19 00:17:59 · 3034 阅读 · 0 评论 -
使用main函数的参数,实现一个整数计算器
使用main函数的参数,实现一个简单的整数计算器,具有整数加,减,乘,除运算的功能。 首先,我们先来看一下main函数参数是什么。 main函数有两种形式: 1. int main(int argc, char *argv[ ]) 2. int main(int argc, char **argv) 其中: argc为main函数的参数个数; argv[]为原创 2017-12-01 17:58:50 · 1591 阅读 · 0 评论 -
指针数组/数组指针
指针数组: 指针数组是数组,是一个存放指针的数组。 这里的a[4]就是一个指针数组,其中各元素的类型都是int*。数组指针: 数组指针是指针,这个指针指向一个数组。 这里的P是一个指针,指向一个内部元素类型为int型的数组。上面两个例子都是非常简单的形式,那么当遇到复杂形式时,该如何判断呢? 我们可以这样来看它: 我们看变量名先和什么结合,它和什么先结合,那么它最终的类型就是什么原创 2017-12-03 01:26:38 · 365 阅读 · 0 评论 -
转移表
要理解转移表,先要了解函数指针数组。 函数指针数组的说明:函数指针数组 先看代码:void print_menu(){ printf("********************************************\n"); printf("***** 1.add 2.sub *****\n"); printf("**原创 2017-12-03 02:14:30 · 2114 阅读 · 0 评论 -
C/C++注释转换
将 / * … * / 注释转换为 / / 注释。transform.h#ifndef __transform_h__#define __transform_h__#define MY_INPUT "input.c"#define MY_OUTPUT "output.c"void comment_transform_main();enum STATUS{ NORSTATUS, CSTATU原创 2017-12-03 02:32:36 · 242 阅读 · 0 评论 -
qsort( )使用和实现
qsort() 的头文件是: #include < stdlib.h > 函数原型: void __cdecl qsort (void * base, size_t num ,size_t width, int ( __cdecl * comp)(const void * , const void * ) )函数说明: __cdecl :调用约定。 base:传入数组。 num:原创 2017-12-04 01:21:21 · 227 阅读 · 0 评论 -
errno,perror,strerror怎么用
errno:在系统出现错误时内核把错误写入到变量errno中。在系统调用返回失败时,必须紧接着引用errno变量,避免程序中的下一条系统调用时出错覆盖errno的值。perror()和strerror():用来打印错误提示信息。perror:将错误信息出处到终端。int main(){ FILE * pFile; pFile = fopen("unexist.ent", "rb");...原创 2018-09-27 17:08:00 · 386 阅读 · 0 评论