
C语言也有大学问
文章平均质量分 70
奋斗的小程序员
嵌入式爬坑中......
展开
-
打印一个数的二进制形式
#include int main(){unsigned num = 0x80000000;int n;printf("请输入一个数:");scanf_s("%d",&n);for (int i = 0; i if ((n&num) == num)printf("1");elseprintf("0");nif ((i+1)% 8 == 0)p原创 2016-08-08 23:51:13 · 1027 阅读 · 0 评论 -
头疼的算法与数据结构——详解插入排序法
插入排序我觉得最像线性表的插入操作:先找到要插入的位置,然后向后移动。代码如下:#include void insertsort(int array[], int len){ int i = 0, j = 0, k = -1,temp=-1; for (i = 1; i<len; i++) { k = i;//待插入位置 temp = array[k];原创 2017-02-26 20:22:44 · 1766 阅读 · 2 评论 -
C语言也有大学问——详解交换两个数
在刚学C语言的时候是不是做过这样一个题:写一个函数实现两个数的交换。void swap(int a, int b){int temp=0;temp=a;a=b;b=temp;}很多人都知道调用这个这样是不行的,这样的参数传递,只会复制一份数据,并不能实现两个数的交换。很多人说传地址就行了啊。void swap(int* a, int* b){原创 2017-03-11 23:19:08 · 1425 阅读 · 0 评论 -
C语言也有大学问——文件操作详解
fopen(打开文件)相关函数 open,fclose表头文件 #include定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该原创 2017-03-29 19:43:58 · 945 阅读 · 0 评论 -
编写优质嵌入式C代码
摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析了编译器语义检查的不足之处并给出防范措施,以Keil MDK编译器为例,介绍了该编译器的特性、对未定义行为的处理以及一些高级应用;在此基础上,介绍了防御性编程的概念,提出了编程过程中就应该防范于未然的多种措施;提出了测试对编写优质嵌入式程序的重要作用以及常用测试方法;最后,本文试图以更高的层次看待编程,讨论一些通用的编程转载 2017-05-06 18:33:11 · 5141 阅读 · 0 评论 -
C语言也有大学问——大数相加问题
两个大数相加,超过了数据类型能表示的范围时,怎么办?首先想到的是字符串,因为字符串只要内存够,就可以存放,这个时候我们就要借助字符串的一些操作来实现大数相加的问题。具体代码如下:#include #include void main(){ char s1[200], s2[200]; int num1[200] = { 0 }, num2[200] = { 0 }, l原创 2017-05-17 10:57:43 · 2310 阅读 · 2 评论 -
switch语句中default用法详解
当年学C语言switch开关语句的时候,很多人会告诉你它是这么用的:switch(表达式){ case常量表达式1: 语句1;break; case常量表达式2: 语句2;break; … case常量表达式n: 语句n;break; default: 语句n+1;break;...原创 2017-02-26 15:39:22 · 116324 阅读 · 31 评论 -
C语言也有大学问——free()函数详解
c语言中经常需要给指针变量分配内存空间,需要用到一组函数:malloc()和free()使用的时候需要包含头文件stdlib.hmalloc()比较好理解,主要关注下free()函数,看下面一段代码: char *str = (char *) malloc (100);strcpy(str, "hello world!");free(str);strcpy(str,原创 2017-06-16 16:48:49 · 5264 阅读 · 0 评论 -
C语言也有大学问——指针问题(一)
因为暑假要出去找实习了,现在在复习C语言知识,然而C语言知识最难的莫过于指针,我把我做的指针问题分享给大家。指针问题1.char * const p;char const * pconst char *p 上述三个有什么区别?char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值原创 2017-05-21 16:25:34 · 3475 阅读 · 15 评论 -
C语言6种排序算法及其实现
C语言中常见的排序算法:冒泡排序法、选择排序法、插入排序法、快速排序法、希尔排序法、堆排序法6种。1.冒泡排序算法思想简单描述:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。冒泡排序是稳定的。算法时间复杂度O(n2)。 ma原创 2017-02-27 18:05:36 · 2621 阅读 · 0 评论 -
链表操作C语言版
在数据结构中,链表是经常会用到的一种基本的数据结构。用C语言写了一个链表:#include #include typedef int T;struct node{ T data; struct node* next;};typedef struct node Node;#define SIZE sizeof(Node)Node* find(Node* h,T原创 2017-02-26 14:04:10 · 2515 阅读 · 0 评论 -
C语言之auto、static、register、const、volatile、extern关键字
(1)auto 这个这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。(2)register 这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。(3)static 常见的两种用途原创 2017-02-20 18:31:33 · 878 阅读 · 0 评论 -
算法之迷宫问题
#include #include void visit(int, int);int maze[9][9] = { { 2, 2, 2, 2, 2, 2, 2, 2, 2 },{ 2, 0, 0, 0, 0, 0, 0, 0, 2 },{ 2, 0, 2, 2, 0, 2, 2, 0, 2 },{ 2, 0, 2, 0, 0, 2, 0, 0, 2 },{ 2, 0, 2, 0原创 2016-08-21 16:11:10 · 1065 阅读 · 0 评论 -
单链表的操作
#include #include typedef int T;struct node{ T data; struct node* next;};typedef struct node Node;#define SIZE sizeof(Node)Node* find(Node* h,T d);//创建一个节点Node* creat_node(T d){ No原创 2016-08-22 10:14:50 · 467 阅读 · 0 评论 -
打印ASCII表
#include #include int main(int argc,char** argv){ int i; for(i=0;i<128;i++) { if(i%8==0) printf("\n"); printf("%3c",(char)i); } system("pause"); return 0;}原创 2016-08-26 14:52:30 · 921 阅读 · 0 评论 -
C语言中堆区栈区的区别
c语言中内存分为四区:栈区:由编译器自动分配释放,存放函数的参数,局部变量的值。堆区:由程序员分配释放,即动态内存的申请和释放。全局区:全局变量和静态变量是放在一块的。初始化的全局变量和未静态变量在同一个区域,未初始化的全局变量和静态变量在相邻的另外一个区域代码区:存放函数体的二进制代码今天我们就来分析一个堆栈区:首先做一个案例,代码如下:#include #in原创 2016-12-06 11:35:41 · 3209 阅读 · 1 评论 -
c语言中堆,栈,数组的增长方向
c语言中堆,栈,数组的增长方向这个问题在C语言中是个重点问题,也是个难点问题,接下来我们谈谈他们在内存中的增长问题:如何判断栈的增长方向?对于一个用惯了i386系列机器的人来说,这似乎是一个无聊的问题,因为栈就是从高地址向低地址增长。不过,显然这不是这个问题的目的,既然把这个问题拿出来,问的就不只是i386系列的机器,跨硬件平台是这个问题的首先要考虑到的因素。在一个物质原创 2016-12-07 17:33:13 · 3127 阅读 · 1 评论 -
C语言面试题之字符串操作
今天做了花了几分钟做了三道C语言面试题,跟大家分享一下:找错Void test1(){char string[10];char* str1="0123456789";strcpy(string, str1);}答:string 大小不够 str1末尾还有一个'\0'Void test2(){char string[10], str1[10];原创 2017-02-19 22:54:47 · 4004 阅读 · 0 评论 -
C语言printf函数输出表达式中的计算顺序
看下面一个例子:#include main(){ int i=8; printf%d, %d, %d, %d\n",i,--i,i,i--); } 运行结果:7, 7, 8, 8为什么会有这样的结果呢?这就涉及到自增、自减运算符的问题了。++i i自增1后再参与其它运算。--i i自减1后再参与其它运算原创 2017-02-19 23:38:40 · 10189 阅读 · 8 评论 -
C语言之static详解
Static翻译出来是“静态”“静止”的意思,在C语言中的意思其实和它的本意差不多,表示“静态”或者“全局”的意思,用来修饰变量和函数。经static修饰过后的变量或者函数的作用域或者存储域会发生变化,而由static修饰的变量在初始值方面也会表现出static关键字的优势。想知道经static修饰过后的变量或者函数的作用域或者存储域发生了什么变化吗,发生变化的原因是什么吗?请大家继续往下看!原创 2017-02-20 18:26:11 · 1301 阅读 · 0 评论 -
头疼的算法与数据结构——详解选择排序法
排序在我们编程中用的很多,排序方法也很多,选择合适的排序方法,会节约程序运行时间。传统的选择排序法,是冒泡排序法演变而来的:#include void selectsort(int array[],int len){ int i = 0, j = 0, k = 0; for(i=0;i<len;i++) for (j = 0; j < len; j++) { if (原创 2017-02-26 16:20:00 · 2045 阅读 · 0 评论