- 博客(70)
- 资源 (3)
- 收藏
- 关注
翻译 结构体对齐方式详解
结构体 对齐原因 1、平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的; 某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。 2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。结构体内存对其规则: 1.第一个成员在与结构体变量偏移量为0的地
2016-11-29 21:53:28 1929 2
原创 实现一个bubble_sort函数,可以完成int ,float,char,string类型的排序
#include<stdio.h>#include<string.h>#include<assert.h>//在这里我们先演示int和字符串两中类型的冒泡排序void bubble_sort(void*data, int nums, int width, int(*cmp)(void*, void*));int int_cmp(void*num1, void*num2);int str_c
2016-11-29 17:14:22 2509
原创 编写itoa函数,该函数为itoi函数的逆函数。将一个整数转化为字符串的形式。
itoa函数 功 能: 把一整数转换为十进制字符串 用 法: void my_itoa(int n, char s[])思路: 整数转化为十进制字符串,首先,需要整除(n/=10)求余(n%10),再次我们考虑到正负问题,对于负数我们可以先求它的相反数的字符串后面再加上‘-’。 最后进行一次翻转,所有数字变为正序。实现://编写itoa函数,该函数为itoi函数的逆函数#include<s
2016-11-27 20:10:23 1682
原创 自身学习效率与结果的思考
体验: 1.书中的例题一个都看不懂,感觉之前所有的努力通通通都是0,到找学霸答疑解惑。在碰撞的情况下,交流经验。最终问题得到了迎刃而解。 2.人在学习的时候,有一种感觉叫做什么都会的样子,看起来很厉害,人越是自我感觉良好的时候,反而越是成长最慢的时刻。 3.将书中的例题敲了一遍之后,却发现自己的代码还是会有很多错误,明明一切感觉好那好,结果却是天壤之别。方式没有经过实践推敲的代码都是不可靠的,
2016-11-27 00:50:59 442
转载 关于回调函数
回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。回调函数必须遵守事先规定好的参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。通常情况下,回调函数采用标准WindowsAPI的调用方式,即__stdcall,当然,DLL编制者可以自己定义调用方
2016-11-26 20:21:49 398
原创 【腾讯面试题】判断机器的大小端存储方式。
机器存储方式分为两种:大端和小端。地址分为:高低地址 数据分为:高地位举例;数字123, 3为该数据的低位 如果低位(3)存储在计算机的高地址,我们称之为大端模式,否则,我们称为小端模式。代码实现 方式一:#include<stdio.h>#include<windows.h>int checkSystem();int main(){ int ret = checkSystem(
2016-11-26 17:58:48 519
原创 每个程序员都应该具备的调试能力。
首先,调试是⼀个程序员最基本的技能,其重要性甚⾄超过学习⼀门语⾔。不会调试的程序员就意味着他即使会⼀门语⾔,却不能编制出任何好的软件。 VC/VS调试快捷键:F9 //设置断点和取消断点 F10 //开始调试//单步执⾏ F11 //进⼊函数内部 F5 //跳到断点处 F7 //编译 Ctrl + F10 //跳到光标处常见调用窗口: 查看内存,局部变量,监视,调用堆栈,线程,寄
2016-11-26 17:04:16 2699
翻译 修改itoa函数,使得该函数可以接受三个参数。其中第三个参数为最小字符宽度。
#include <stdio.h>#include <limits.h>void itoa(int n, char s[], int width);void reverse(char s[]);int main(void) { char buffer[20]; itoa(INT_MIN, buffer, 7); printf("Buffer:%s\n", buffer);
2016-11-24 11:23:41 1383
翻译 将整数n转化为以b为底的数,并将转化结果以字符的形式保存到字符串s中。
#include <stdlib.h>#include <stdio.h> void itob(int n, char s[], int b);void reverse(char s[]);int main(void) { char buffer[10]; int i; for ( i = 2; i <= 20; ++i ) { itob(255, b
2016-11-24 11:11:43 970
原创 Lunix环境下用main函数的参数实现一个简易参数
#include<stdio.h>int sub(int a,int b){return a-b;}int mydiv(int a,int b){if(0==b){printf("the divsor is zero!\n");return -1;}return a/b;}int add(int a,int b){return a+b;}int multi(int a,i
2016-11-24 00:47:44 428
翻译 改进itoi函数
#include <stdlib.h>#include <stdio.h>#include <limits.h>void itoa(int n, char s[]);void reverse(char s[]);int main(void) { char buffer[20]; printf("INT_MIN: %d\n", INT_MIN); itoa(INT_MIN,
2016-11-24 00:41:32 516
翻译 将字符串S1中任何与字符串S2中匹配的字符都删除,实现函数squeeze(s1,s2).
/* test driver */#include <stdio.h>#include <string.h>#include<windows.h>void squeeze2(char s1[], char s2[]);//定义buffer的原因是想输出的能够看一下前后元素变化。int main(void){ char *leftstr[] = //指针数组,它的一个数组元素为
2016-11-23 21:41:46 3249
翻译 编写hoti(s),把由十六进制数字组成的字符串(0x或0X)转化为与之等价的整形值。字符串中允许包含的数字为:0-9,a-f或A-F。
#include <stdio.h>#include <stdlib.h>#include<windows.h>/* Here's a helper function to get me around the problem of not* having strchr*///将字符c 传入函数,转化成相应的整形值,用到一个技巧。10+(i)/2,巧妙地将对应的大小写字母转换为同一个数。若为不
2016-11-23 19:12:13 1904
翻译 打印分别由signed和unsigned限定的char , short, int ,与long类型变量的取值范围。
由结果分析可知: 要打印类型取值范围时,需要调用limits.h头文件 打印: 引用 比特位个数: 大写类型_BIT 最大值: 大写类型_MAX 最小值 : 大写类型_MIN 若打印无符号最大值 U大写类型_MAX #include <stdio.h>#include <limits.h>int main ()
2016-11-23 18:02:17 3935
翻译 查找C语言中的基本语法错误,如圆括号,左括号,花括号不匹配等
版本一:#include <stdio.h>#define MAXLINE 1000 /* max input line size */char line[MAXLINE]; /*current input line*/int getline(void); /* taken from the KnR book. */intmain(){ int len=0; int t=0;
2016-11-23 00:46:17 4284 10
翻译 编写一个删除C语言源程序中的所有注释语句,要正确处理带引号的字符串和字符常量。
#include <stdio.h>#define MAXLINE 1000 /* max input line size */char line[MAXLINE]; /*current input line*/int getline(void); /* taken from the KnR book. */intmain(){ int in_comment,len; int in
2016-11-23 00:29:44 2179
翻译 把较长的输入行折成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个元素。
#include <stdio.h>#define MAXLINE 1000 /* max input line size */char line[MAXLINE]; /*current input line*/int getline(void); /* taken from the KnR book. */intmain(){ int t,len; int location,spa
2016-11-23 00:16:36 773
翻译 将输入的空格串替换为最少数量的制表符和空格。
#include <stdio.h>#define MAXLINE 1000 /* max input line size */#define TAB2SPACE 4 /* 4 spaces to a tab */char line[MAXLINE]; /*current input line*/int getline(void); /* taken from the KnR book. */
2016-11-23 00:02:30 525
翻译 将输入的制表符替换成适当数目的空格,使空格充满到下一个制表符终止的地方。
#include <stdio.h>#include <stdlib.h>#include <string.h>//最大缓冲区1024#define MAX_BUFFER 1024#define SPACE ' '#define TAB '\t'//计算空格数int CalculateNumberOfSpaces(int Offset, int Ta
2016-11-22 23:52:24 644
原创 将一个输入的字符串进行逆序
#include <stdio.h>#define MAX_LINE 1024//对输入的字符串进行处理末尾加'\0' void discardnewline(char s[]){ int i; for(i = 0; s[i] != '\0'; i++) { if(s[i] == '\n') s[i] = '\0'; }} //翻转字符串int rever
2016-11-22 01:52:30 1534
原创 11/22日习题课学习笔记
只有真正理解了知识,才能持久的掌握。以后的学习才会更加的轻松! 理解比当下记住更有效!实现了以下问题: 1.递归逆序打印字符串 2.main 函数输入多个命令号参数计算 3.冒泡排序 4.使一个数组前半部分为奇,后半部分为偶 5.杨氏矩阵中找一个数是否存在 6.一个字符串中查找第一个出现的字符#include <stdio.h>#include <assert.h>#include
2016-11-22 01:50:02 288
翻译 打印长度大于80个字符的所有输入行。
#include <stdio.h>#define MINLENGTH 81//读取缓冲区判断该输入是否为大于80个字符的那一行int readbuff(char *buffer) { size_t i = 0; int c; while (i < MINLENGTH) { c = getchar(); if (c == EOF) retur
2016-11-22 01:11:03 1154
翻译 打印各个字符出现频度的直方图
#include <stdio.h>/* NUM_CHARS should really be CHAR_MAX but K&R haven't covered that at this stage in the book */#define NUM_CHARS 256int main(void){ int c; long freqarr[NUM_CHARS + 1]; long th
2016-11-22 00:44:55 822
翻译 打印输入中单词长度的直方图,垂直方向的。折磨使我强大的一个程序!
#include <stdio.h>#include<windows.h>#define MAXWORDLEN 10 //宏定义最长数组元素个数int main(void){ int c; int inspace = 0; long lengtharr[MAXWORDLEN + 1]; int wordlen = 0; int firstletter
2016-11-22 00:33:39 1109 1
原创 以每行一个单词的形式打印其输入
getchar()获取并进行打印,遇见‘ ’,‘\t’,’\n’打印换行.#include<stdio.h> int main(void){ int state = 1; char ch; while ((ch = getchar()) != EOF) { if (ch == ' '||ch==',') {
2016-11-20 22:24:59 675
原创 查找一个字符串中,出现的第一个单身字符。/一个字符串中查找第一个只出现一次的字符。 //要求复杂度为O(N).
思路: 1.复杂度要求为O(1),要找出一个字符串中第一次只出现一次的字符,肯定需要逐个比较。 2.那既然要逐个比较,又要复杂度为O(1),怎么办呢?有了while(1) 一旦达到目的,跳出循环。 3.while(1)已经确定,很好。那一个字符串中的字符要进行逐个比较,比较是两个东西的事,那就需要两个指针指向不同的字符。很好。 4.两个进行比较,有几个这么情况:(1)相等(2)不相等 5
2016-11-20 20:36:20 958
原创 2. 有一个二维数组.----杨氏矩阵 。数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
//2.//有一个二维数组.----杨氏矩阵//数组的每行从左到右是递增的,每列从上到下是递增的.//在这样的数组中查找一个数字是否存在。//时间复杂度小于O(N);#include<stdio.h>#include<windows.h>#define ROW 3#define COL 3int judge(int arr[ROW][COL], int value);int main(
2016-11-20 17:08:01 887
原创 //模拟strcpy //strncpy //strcat //strncat //strcmp //strncmp //memcpy //memmove
#include<stdio.h>#include<windows.h>#include<assert.h>//strcpychar* my_strcpy(char*dst,const char*src){ assert(dst); assert(src); char*ret = dst; while (*dst++ = *src++); *dst =
2016-11-19 23:12:31 304
原创 1.调整数组使奇数全部都位于偶数前面。
#include<stdio.h>#include<windows.h>int main(){ int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int b[10] = { 0 }; int start = 0; int n = sizeof(a) / sizeof(a[0]); int end = n - 1
2016-11-19 00:09:55 330
原创 将连续的多个空格用一个空格代替
//编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替#include<stdio.h>#include<windows.h>int main(){ int c; while ((c = getchar()) != EOF) { if (c == ' ') { pu...
2016-11-18 02:34:18 1254
原创 单词计数 行数计数 字符计数
//单词计数//这里对单词的定义比较宽松,它是任何其中不包括空格,制表符或换行符的字符序列#include<stdio.h>#include<windows.h>int main(){ int c; int nl, nc, nw;//nl行数nc字符数nw单词数 int state; nl = nc = nw = 0; state = 1; w
2016-11-18 02:20:57 706 1
原创 将制表符\t和回退符\b以可见的方式显示出来
注意:用printf函数打印 因为getchar每次只接受一个字符,所以输入什么显示什么1.用printf函数显示//将制表符\t和回退符\b以可见的方式显示出来#include<stdio.h>int main(){ int c; while ((c = getchar())!=EOF) { if (c == '\\') {
2016-11-18 01:22:53 2246
原创 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替
//编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替#include<stdio.h>#include<windows.h>int main(){ int c; while ((c = getchar()) != EOF) { if (c == ' ') { putchar(c);
2016-11-18 00:39:54 777
原创 C和指针待完事项【计算标准输入单词“the”出现的次数,输入的单词由一个或多个空白字符分离。】
//计算标准输入单词“the”出现的次数,输入的单词由一个或多个空白字符分离。#include<stdio.h>#include<string.h>#include<stdlib.h>char const whitespace[] = "\n\r\f\t\v";int main(){ char buffer[101]; int count; count = 0;
2016-11-17 02:44:39 357
原创 画函数栈帧。(esp/ebp/pc/eax call ret , arg )
源代码:#include<stdio.h>void fun(int a, int b){ int c = 0xcccccccc; printf("haha nishigehaoren");}int main(){ int a = 0xaaaaaaaa; int b = 0xbbbbbbbb; fun(a, b); printf("you shou
2016-11-17 02:14:08 1964
原创 实现字符串拷贝的七种方法
//字符串拷贝函数的n种做法 //方法一 void copy_string1(char from[],char to[]) { int i = 0; while (from[i]) { to[i] = from[i]; i++; } to[i] = ‘\0’; }方法二 void copy_string2
2016-11-16 02:27:29 4546
原创 【C语言】写冒泡排序可以排序一个整型数组。
//.写冒泡排序可以排序一个整型数组。#include<stdio.h>#include<windows.h>void sort(int array[],int len);int main(){ int i = 0; int array[] = { 9, 3, 6, 5, 8, 6, 7, 5, 6, 8, 2, 2, 3, 1, 2 }; int len = siz
2016-11-15 00:26:33 4933 3
原创 【C语言】模拟实现printf函数 可变参数列表的实战
模拟实现printf 看代码:// 打印时根据字符串所访问的值为‘%’时,开始进行判断类型。 //这块用switch结构判断‘%’下一个字符确定类型,若为‘d’ //则为整形,为‘s’为字符串#include<stdio.h>#include<windows.h>#include<stdarg.h>#include<assert.h>void my_printf(char*format
2016-11-14 23:38:33 604
原创 【C语言】用递归实现字符串逆序的曲折之路
先看一下简洁版的。 1.成功版#include<stdio.h> #include<windows.h>char s[1000];void reverse(char *s){ if (*s) { reverse(s+1); printf("%c", *s); } return; }int main(){ g
2016-11-14 00:52:29 2427 3
原创 【C语言】建立动态链表并输出链表
写一个函数建立一个有3名学生数据的单向动态链表//建立静态链表#include<stdio.h>#include<windows.h>#include<string.h>#include<malloc.h>#define LEN sizeof(struct Student)struct Student{ long num; float score; struct
2016-11-13 22:15:39 18102
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人