自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (3)
  • 问答 (2)
  • 收藏
  • 关注

原创 C语言之内存字节对齐

我们常常回来讨论结构体的内存大小 比如下面这段代码:#include<stdio.h>#include<stdlib.h>struct arr{ int a; int b;};int main(){ printf("%d", sizeof(struct arr)); system("pause"); return 0;}我们可以知道这最终输出为8

2016-04-30 18:28:58 841

原创 常用的内存操作函数

接下来我们进行详细剖析一些内存操作的函数:1.malloc()函数,calloc()函数和free()函数malloc()函数和free()函数malloc()函数原型:void *malloc(size_t size);malloc()函数用来内存分配,如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当然,对于malloc()函数所对应的就是free

2016-04-30 12:06:13 2786

原创 指针?数组?

前言:对于C语言的学习,我记得最初就有人说最难莫过于指针,当初我们的学习呢,又是先学习了数组,然后接触的就是指针,指针和数组被很多书籍放在一块进行教学,指针是C/C++中的精华,而难点就在于对指针和数组的掌握以及内存的管理,所以在这里,我们要对这个问题,进入一些研讨:1 .什么是指针在探究之前我们要弄清楚指针的概念,指针做什么int *p;学过C的人都应该知道,这定义了一个指针,在这里p到底是个

2016-04-27 14:12:54 2431

原创 一道关于位段及大小端的面试题

输出下面这一道题的输出:struct mybitfields{ unsigned short a : 4; unsigned short b : 5; unsigned short c : 7;} testvoid main(void){ int i; test.a = 2; test.b = 3; test.c = 0; i =

2016-04-24 14:37:12 2182 5

原创 牛客网刷题总结

近期在牛客网刷了一些题,总结了一些容易犯的错误,现在来一一列举出来。1.要清楚什么是传递地址,什么事传递值。 2.输出“%s”时,遇到‘\0’就会停止, 3.对于左对齐要加-, %-30.4f, printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐30个字符,4位精度。 4. ||逻辑运算符只要前面为真,后面就不用再进行判断了。 设x、y、t均为int型变量,则执

2016-04-24 11:45:18 7029

原创 长度受限的字符串函数的实现

1.strncat()函数 首先要说的是strncat函数 函数原型: char *strncat(char *dest,const char *src,size_t len); strncat就是把src中的最多len个字符复制到目标数组的后面,但是,strncat总是在结果的字符加一个NUL字节。//实现strncat函数#include<stdio.h>#include<stdli

2016-04-23 21:46:45 995 1

原创 冒泡排序

关于冒泡排序,是一个经典的排序算法,大一学习老谭的C时就开始接触它,这个排序因为可读性强,所以算是最好理解的排序算法了。 这个算法的原理就是两个相近的元素进行比较,他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 算法的原理: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最

2016-04-23 20:29:56 898 1

原创 链式栈的实现

链式栈: 链式栈的结构与链表类似,如所示,其中,top为栈顶指针,始终指向栈顶元素,栈顶元素的指针指向下一个元素,依此类推,直到栈底,栈底元素的指针区域为空如果top为空,表示该栈是个空栈。我使用了三个文件实现了链式栈,首先是linked_stack.h,包含了我的结构体和函数声明#ifndef __LINKED_STACK_H__#define __LINKED_STACK_H__#defin

2016-04-23 18:54:38 659

原创 顺序栈的实现

顺序栈 利用一组连续的内存单元依次存放自栈底到栈顶的数据,同时,用一个指针top只是栈顶的位置,在C语言中,这可用数组来实现,一般是先开辟一块区域,在编程中可根据需要再对此区域进行调整。在这里,我依然使用三个文件来实现顺序栈。 首先,是我的Sequence_stack.h头文件,里面封装了我的顺序栈还有我的函数声明#define _CRT_SECURE_NO_WARNINGS 1#ifndef

2016-04-23 17:09:49 942

原创 双向链表的实现

双向链表,双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。 代码如下://double_link_list.h头文件#ifndef __DOUBLE_LINK_LIST_H__#define __DOUBLE_LINK_LIST_H__#i

2016-04-20 18:15:04 840

原创 单循环链表的实现

对于单循环链表: 它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。//circular_linked_list .h 头文件#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>typedef struct round{ int data; struct round *pN

2016-04-17 16:57:35 1293

原创 递归函数

对于递归,递归函数直接或者间接地调用自身,函数每一次调用必须进一步的靠近目标,当达到目标时,递归函数就不再调用自身了。阅读递归函数,只要简单的认为递归函数将会执行它的预定任务即可。 尾递归:如果递归调用是函数所执行的最后一项任务,我们把它叫做尾递归。 对于尾递归,我们可以很方便地转换成一个简单循环,完成相同的任务,这就是我们所说的迭代。 如:阶乘和斐波那契数列的问题,用迭代来解决问题,效率就会

2016-04-16 17:57:57 496

原创 浮点数的问题

float %f 4个字节 double %lf 8个字节 long double %Lf 8个字节(某些平台下为16个字节)浮点数会有一定的误差,智能精确到具体位之内。三种类型的范围#include<stdio.h>#include<stdlib.h>#include<float.h>int main(){ //输出三种浮点数的范围。 pri

2016-04-16 17:29:01 661

原创 判断字符串包含的问题

在判断字符串包含的问题时,我们会有一种思路,就是原字符串与子字符串进行比较,然后把子字符串中的每一个元素和原字符串进行依次的比较,这样下去,最终得到结果。这样最终虽然能够得到结果,但是效率太低了,所以这里需要一种新的思路。 在这,我们提供一种新的思路: 如下题://判断一个字符串是否为另外一个字符串旋转之后的字符串。//例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1 =

2016-04-16 16:34:54 500

原创 剑指offer—旋转字符串

2.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA#define _CRT_SECURE_NO_WARNINGS 1//2.实现一个函数,可以左旋字符串中的k个字符。//AABCD左旋一个字符得到ABCDA//AABCD左旋两个字符得到BCDAA#include<string.h>#include<stdio.h>

2016-04-16 15:59:53 479

原创 字符串常量和字符数组的区分

首先我们来看个程序,这个程序说的是字符串函数strcat()函数的实现:#include<stdlib.h>#include<assert.h>#include<stdio.h>#define MAX 20char *my_strcat(char *dest, const char *src){ char * ret = dest; assert(dest); as

2016-04-16 12:53:29 2655 1

原创 关于C函数的调用过程-栈帧

关于栈帧,从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里等等。 首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),我们称为栈底指针,寄存器esp指向当前的栈帧的顶部(低地址),我们称为栈顶指针。 注意:EBP指向当前位于系统栈最上边一个栈帧

2016-04-15 20:52:45 2250

原创 浅析进程地址空间

在linux下,当我们对我们所写好的程序.c文件进行gcc编译过程时,会出现一个a.out可执行文件,这个文件中到底包含什么呢,接下来我们来看一看。 在UNIX下可使用size命令查看可执行文件的段大小信息。如size a.out。 接下来,我进行测试的演示: 这个是我写好的测试程序。 首先我们来测试这个程序的段大小信息。 我们在这,可以知道,a.out中含有 text(文本段),

2016-04-15 20:27:52 454

原创 可变参数列表

在函数原型中,列出了函数期望接受的参数,但原型只能显示固定数目的参数。让一个函数在不同的时候接受不同数目的参数是不是可以呢?答案是肯定的,但存在一些限制。#include<stdio.h>#include<stdlib.h>#include<stdarg.h>//利用可变参数列表实现加法。int add(int num, ...){ int i = 0; int sum =

2016-04-13 00:21:50 1189

原创 字符串函数的实现

1.strcat函数的实现原型声明:char strcpy(char dest, const char *src); 头文件:#include #include<stdlib.h>#include<assert.h>#include<stdio.h>char *my_strcpy(char *dest, const char *src){ char *ret = dest;

2016-04-09 19:21:43 695

原创 关于字符串逆置的小题

//5.有一个字符数组的内容为:”student a am i”,请 //你将数组的内容改为”i am a student”. //要求: //不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。 在这里我们所采用的方法简单说就是先将 student a am i变成i ma a tenduts,然后,再进行对每个单词进行逆置。最终变成 i am a student。#inc

2016-04-09 14:27:29 485

原创 单链表的增删排序求长度的实现。

对于链表,我们可以知道他和算法会有相关。我们至少通过两组结构来存储:数组和链表。 接下来,我们来进行单链表的实现 在这里,我们可以进行增加,删除,求长度,排序。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<stdbool.h>//定义了一个链表节点的数据类型//在这里你要清楚什么

2016-04-09 13:41:57 1085

原创 预处理中的“#”运算符和“##”运算符

“#”和“##”这两个运算符都是预处理,在这里,对他的使用是一个关键,接下来我们通过一段程序来认识一下://#//###include<stdio.h>#include<stdlib.h>#define PRINT( n ) printf( "token" #n " = %d", game##n )int main(){ int game9 = 99; PRINT(9);/

2016-04-06 11:24:05 1119 1

原创 折半查找的实现

关于折半查找的程序与大家分享://折半查找的方法#include<stdio.h>#include<stdlib.h>int bin_search(int ch, int arr[], int len){ int left=0; int right=len-1; int mid; while (left <= right) { mid

2016-04-05 21:40:37 641

原创 宏的全解

宏的概念:C++ 宏定义将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替。宏书写形式:#define <宏名>(<参数表>) <宏体>定义的几个宏:C语言中定义了几个宏:__LINE__ 编译文件的行号 __FILE__ 编译文件的名字__DATE__ 编译时刻的日期__TIME__ 编译时刻的时间__STDC__ 判断该文件是不是定义成标准C程序#includ

2016-04-05 21:00:58 1191

原创 让人分不清的sizeof和strlen

接下来我们来说说sizeof和strlen。1.sizeof函数or关键字?对于sizeof,第一点我们要清楚的是,它是一个关键字,并不是一个函数。正因为sizeof不是函数,因此我们不把它所要求得长度的对象叫做参数,这也是sizeof不能求得void类型的长度 你无法求出sizeof(void),其实你是无法声明出void的一个变量的,void指的是一个空类型,空类型你是无法知道变量内存空间

2016-04-04 15:52:39 542

原创 C语言一些关于位操作符的小练习

1.编程实现: 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 输入例子: 1999 2299 输出例子:7#include<stdio.h>#include<stdlib.h>int Different_bits(const int num1, const int num2){ int a = num1; int b = num2;

2016-04-04 14:31:27 928

原创 C-main函数剖析。

对于main函数,我想任何一个接触到C语言的都不会陌生,但是说起main()函数有参数,你可能会产生很多疑问了。 首先,我们来看下msdn,这个里面对main()函数有详细的说明。在这里,我们可以看到main()函数其实是含有三个参数的,分别是int argc, char *argv[ ], char *envp[ ]这三个参数其实就是main函数的参数。在c的编译器中,一般是允许main函数是没

2016-04-03 15:17:45 1066

原创 关于linux新手常用命令

这些命令是最先看linux时常用的,现在来汇总下:1.切换用户 当使用su你可以在当前用户模式下切换到root模式,而你想要退出root时,输入exit命令即可。 2.显示日期的指令 当我们在命令行模式下,需要知道日期时,只需要键入命令 date 3.显示日历 在linux下,我们也可以用命令 cal 来查看日历。默认我们输出的是某一个月的。 4.计算器 采用命令 bc 我们可

2016-04-03 12:32:35 648

原创 关于源程序到可执行程序的过程

源程序,是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件,我们通常理解为源程序就是我们所写好的代码。 可执行程序,我们常说的.exe程序,可以执行程序,完成计算机功能。在C语言中,.c文件就是所谓的源文件,接下来,我们剖析一下,源程序到可执行程序的过程。在这个过程中,会发生如下的变化:.c文件生成.obj文件的过程,我们称为编译,.obj文件生成到.exe文件的过程,我们称为链

2016-04-02 13:43:18 10390 1

技术之瞳 阿里巴巴技术笔试心得 高清完整.pdf版下载

从别处花钱买来

2017-02-13

计算机科学导论

《计算机科学导论》是2009年机械工业出版社出版的图书,由佛罗赞编写。

2015-12-28

业余者用VC(MFC)编写串口调试助手

利用VC++6.0MFC做的串口助手,教程都在这里面。

2015-12-06

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除