![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
The C language
文章平均质量分 84
JasonLeaster
Doing is better than saying.
展开
-
Implement a Shell by yourself -- MIT xv6 shell
Implement a Shell by yourself -- MIT xv6 shell这个其实是作为6.828的一个小课堂作业 ...着重分析构建思想和过程,具体代码实现去github可以找到.https://github.com/jasonleaster/MIT_6_828_assignments_2012/blob/homework1/sh.c原创 2015-04-19 02:45:45 · 7308 阅读 · 11 评论 -
数组名取地址所算数运算应注意的"trap"
数组名取地址所算数运算应注意的"trap"直接看代码:#include int main(){ int array[5]; printf("array : %p\n",array); printf("array + 2 : %p\n",array+2); printf("&array + 2 : %p\n",&array+2); r原创 2014-11-19 01:41:41 · 1576 阅读 · 0 评论 -
关于换行waring问题的探讨.
关于换行waring问题的探讨.如果某行代码长了,这时候会导致代码很难看,于是会有某一语句占用多行的现象比方说下面这里在判断语句的() 中if(!p_img_collection || !(p_img_collection->img_origin) \ || !(p_img_collectio原创 2014-10-23 17:19:18 · 1293 阅读 · 2 评论 -
MIT的C指针练习代码
MIT的C指针练习代码觉得很好的代码,贴出来. 大概瞄了一眼,感觉不是很难 现在比较忙,以后做解析(如果有必要的话)#include #include voidf(void){ int a[4]; int *b = malloc(16); int *c; int i; printf("1: a = %p, b =原创 2014-10-03 14:49:14 · 2484 阅读 · 0 评论 -
Nvidia 面试题之一
Nvidia 面试题之一 大概的题目是这样的: 实现一个函数 void * storenum(struct node* list,int n , int m); 作用于分式值小于1的除法. eg: 1/4 = 0.25 这里 m = 4, n = 1 把输出的结原创 2014-10-11 23:00:18 · 2949 阅读 · 0 评论 -
malloc中 heap block 的 blocksize 大小问题
heap block 引发的思考问题背景:Implicit Free Lists Any practical allocator needs some data structure that allows it to distinguish block boundaries and to distinguish between allo原创 2014-07-27 23:15:19 · 4088 阅读 · 2 评论 -
虚拟地址 线性地址 物理地址 傻傻分不清楚?
virtual address Linear address原创 2014-10-07 10:55:24 · 5595 阅读 · 1 评论 -
double x = 10 ,y = 0;y = x % 2; 这个表达式正确吗?
The remainder function and % operator. 下面这段代码过不了编译的(gcc)#include #include int main(){ double x = 10; printf("x % 2 = %lf\n",x%2.0); return 0;}operator % 仅能操作在整形数原创 2014-10-23 16:26:29 · 1711 阅读 · 1 评论 -
something with buffer 有意思的缓冲区:关于setbuf()一段很有意思的代码
今天为了搞明白buffer的机制弄了很久。。。以至于本来该做的事情都耽误了在CSDN别人blog上面看到这么一段代码,很有意思#include#includeint main(){ int c = 0; int i = 0; setbuf(stdout,malloc(5)); while((c = getchar()原创 2014-03-24 14:40:53 · 1604 阅读 · 0 评论 -
Do you master on array in C ?
Do you master on array in C ?由于新标准C99的支持变长数组, 几乎C的标准特性就是看着gcc来的(Linux 内核严重依赖GCC)int mani(){ const int a = 10; int array[a]; return 0;}这段代码能过编译吗?原创 2014-10-06 01:53:01 · 2127 阅读 · 0 评论 -
同类型结构体之间赋值不一定有效
同类型结构体之间赋值不一定有效今天为这个问题debug好久...之前看到一个关于结构体使用的技巧, 这个技巧能够避免内存零碎. 保证结构体所属内存尽量不要零散化.struct struct_name{element_type varible; ...; element_type pointer[0];}关于该用法的介原创 2014-09-17 23:08:00 · 1364 阅读 · 0 评论 -
腾讯实习面试题 数组那点事
看到一段腾讯的实习面试题:#include "stdio.h"int A(char a[10]);int main(){ char a[10]; size_t temp = sizeof(a)*10; size_t foo = A(a)*2; printf("%ld\n",temp+foo); re原创 2014-04-17 13:12:44 · 1289 阅读 · 0 评论 -
C 关键字 register 和嵌入式汇编联合使用的讨论
C 关键字 register 和嵌入式汇编联合使用的讨论 register 是C99 的keyword之一.register 是储存类型之一.这里仅讨论register 储存类型,auto static extern的各种故事请移步《C on pointer》原创 2014-10-17 12:59:38 · 2078 阅读 · 0 评论 -
字符串中数字型字符转换成实际的数值
字符串中数字型字符转换成实际的数值 这是一篇bug笔记.... 如果你正在读C4的源码,遇到和我同样的问题,希望能互助交流~是节选自C4的一小段代码.这段代码把p指向的字符串中的数字字符读取出来,转换为整形比方说"0x100"会被转化为int 类型数据 number = 256; 值原创 2014-12-19 18:29:28 · 3529 阅读 · 0 评论 -
sprintf(buffer,"%d %c %x",a,b,c);当整形数据占两个字节的时候,buffer至少要多大,才不会溢出?
关于这个问题差点纠结而亡。。。废话不多说。大家都知道sprintf是给第一个参数的指针指向的内存写入字符串。此处问buffer至少要多大,我第一直觉就是6byte。(原谅我傻x一样的逻辑)很白痴的以为当整形数据占2个byte的时候,%d 用2个byte %c一个byte %x2个byte加上空字符就没事了天真,无邪呵呵真相在此:(引用答案说明)The fir原创 2013-08-18 01:46:16 · 6271 阅读 · 1 评论 -
针对main函数的运行时stack的分析
针对main函数的运行时stack的分析 这里需要特殊说明的是运行环境是64-bits的Ubuntu.编译器是gcc测试用代码:int main(int argc,char* argv[]){ int array[10]; array[0] = 10; array[9] = 9; return 0;}原创 2014-09-09 00:48:57 · 2022 阅读 · 0 评论 -
LeetCode #Reverse words in a string#
刚看到这个题目,手痒了.还挺有意思的...#include <stdio.h>int main(){ char str[] = "Please reverse this string!"; printf("%s\n", str); str_rev(str); printf("%s\n", str); return 0;}int str_rev(char *stri原创 2015-02-12 21:17:59 · 1231 阅读 · 0 评论 -
回旋数组问题
刚开始学C的时候, 菜到不行... 还记得那时候有个叫范二安叔的人问过我一个回旋数组的问题. 当时就是没写出来. 后来到了大一晚上在图书馆死磕了写完了才回去.还记得那会儿我高中刚毕业, 范二安叔初中毕业就没读书了去工作了. 即使现在回想起来, 还是觉得他很牛. 之后就很久没有联系说话了.... 最近有朋友在学C, 于是就把这个问题抛给他了. 也是一个Green hand的分原创 2015-03-27 16:59:18 · 1833 阅读 · 0 评论 -
C/C++ sizeof(void)
笔记贴,直接上代码吧, 一下代码的输出是多少, 无非就是针对 sizeof(void)#include int main(){ printf("%d\n", sizeof(void)); return 0;}是 1为什么不是 0 ?空类型的实例中不包含任何信息,本来求sizeof应该是0, 但是当我们声明该类型的实例的时候, 它必须在内存中占有一定的原创 2015-03-20 17:51:45 · 1453 阅读 · 0 评论 -
当罗密欧遇到朱丽叶... ...当指针遇到数组
题目是扯淡. 无视他们说, 题目要长长长长....当罗密欧遇到朱丽叶的时候, 看官们都很happy... 古典唯美悲情爱情嘛~然而捏. 数组遇到指针的时候, 我就差点panic了...这里特别感谢 @Fantasy @凯旋冲锋 还有一起关注问题讨论问题的Essential On Linux的道友们事情的起因源于这里的一个hash表的实现,原创 2015-03-16 21:50:28 · 1242 阅读 · 0 评论 -
通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
刘子健 原创作品转载请注明出处《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000对一下代码进行反汇编分析:int g(int x){ return x + 42;} int f(int x){ return g(x);} int main(void){原创 2015-03-01 13:58:59 · 2972 阅读 · 0 评论 -
关于C程序生成随机数遇到的问题
很久之前就遇到这个问题了,今天又踩坑...如果想在C语言里面产生随机数,需要调用rand() Description The C library function int rand(void) returns a pseudo-random number in the range of 0 to RAND_MAX. RAND_MAX is a constant whose default v原创 2015-03-02 15:23:08 · 1382 阅读 · 0 评论 -
#define XXX do{ XXX } while(0) 为什么会有这种用法
#define XXX do{ XXX } while(0) 为什么会有这种用法时常会遇到一个很"奇怪的宏定义", rt.(欧西巴...思考不够深刻啊, 皮鞭, 啪啪啪)最近又遇到这家伙了,Quora上面Love神回答了这个问题, 我也就顶礼膜拜http://www.quora.com/What-is-the-purpose-of-using-do-while-0-in原创 2015-03-14 23:26:20 · 2944 阅读 · 0 评论 -
资源向导之" C II "
资源向导之 " C II "CII : > by David Hanson原创 2015-02-11 01:12:03 · 1273 阅读 · 0 评论 -
不用第三个变量,交换两个变量的值三种方案详解
Change two varible's value without the third varible通常,交换两个变量的值的技巧就是多用一个中间变量。source code:#include#includeint main(){ int varible_1 = 10; int varible_2 = 20; int原创 2014-03-22 23:43:40 · 1871 阅读 · 0 评论 -
Puzzle over “goto” goto背后发生了什么
int switch_eg_impl(int x, int n) { /* Table of code pointers */ static void *jt[7] = { &&loc_A, &&loc_def, &&loc_B, &&loc_C, &&loc_D, &&loc_def, &&loc_D };/* static void jt[7]原创 2014-04-24 22:46:13 · 1969 阅读 · 0 评论 -
关于+—~有意思的一段C代码
关于+ - ~有意思的一段C代码问题是钟哥几天前在automation的群里面抛出来的。code:#include int main(int argc,char* argv[]){ int a = 7; int b = 1; printf("before process,a = %d,b = %d\n",a,b);原创 2014-06-06 17:34:42 · 1397 阅读 · 0 评论 -
程序打印自身代码的两种方法
程序打印自身代码的两种方法方法一:利用fopen,打开可执行程序对应的source code file/*****************************************code writer : EOFcode file : print_my_self.ccode date : 2014.08.01e-mail: jasonleaster@gm原创 2014-08-01 01:38:43 · 2998 阅读 · 0 评论 -
Bitter of scanf
之初学习C,是在VC下面的(其实第一个hello world都是在turbo C下面敲出来的,蓝色屏幕,hello world,别提当时多激动了)。学到后面,见识过各路高手批评我的代码风格很乱,后面才慢慢改,原谅我的无知,看的第一本教材是用的老谭的PDF版本的(高中毕业,在家没事干,窝在家里对着老掉牙的turbo C 敲代码,只是觉得很好玩,觉得这东西很神奇,我居然可以让电脑按照我的想法做事情原创 2014-03-18 01:33:39 · 2691 阅读 · 14 评论 -
多文件编译中避免多次include同一个文件
file 1以下是header file——pr_exit.h#ifndef _PR_EXIT_H#define _PR_EXIT_Hincludevoid pr_exit(int status);#endiffile2以下是c source file——pr_exit.c#include"sys/wait.h"void pr_exit(int st原创 2014-01-28 21:57:36 · 2361 阅读 · 0 评论 -
C语言的那些秘密之---函数返回局部变量
写的非常好,忍不住要mark啊!一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的转载 2014-03-21 22:42:17 · 968 阅读 · 0 评论 -
C language 模拟 win的经典游戏——扫雷
让我们在terminal下愉快的...扫雷昨天跟奇葩霖聊起“雷区”这个敏感词汇,然后很荣欣的。。。应该轰炸不到我。。。后来百无聊赖的去玩了把扫雷,然后发现我之前都是乱扫的,没有任何技巧。百科之后才发现,扫雷是有技巧的,接着玩了一把,咦挺有意思的。。。大概感受了一下,今天又要考数电,昨晚写了个框架,就到两点半了。。。睡。。。今天中午回来,第一件事就是接着写。。。简直是爽。原创 2014-06-23 16:22:55 · 1674 阅读 · 0 评论 -
为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆
之前看了很多关于uboot的分析,其中就有说要为C语言的运行,准备好堆栈。而自己在Uboot的start.S汇编代码中,关于系统初始化,也看到有堆栈指针初始化这个动作。但是,从来只是看到有人说系统初始化要初始化堆栈,即正确给堆栈指针sp赋值,但是却从来没有看到有人解释,为何要初始化堆栈。所以,接下来的内容,就是经过一定的探究,试图来解释一下,为何要初始化堆栈,即:为何C语言的函数调转载 2013-12-24 17:26:56 · 1354 阅读 · 0 评论 -
自己动手写printf -- 库函数printf的实现
大概去年夏天的时候,在《C和指针》里面一个练习题要求实现一个很简单的不包含打印浮点数功能的printf函数。但是很好奇,于是一直纠结下去,结果就是知道了printf的实现,自己也写了一个简单的。或许是夏天的原因吧,那时候暑假没回去,凌晨四点兴奋到不能睡觉。那时候刚开始写blog。没想整理一下,只是简单的把最重要的实现"工具"贴了一个blog在http://blog.csdn.net/cinmy原创 2014-04-27 17:25:43 · 16213 阅读 · 9 评论 -
Do you really know what means initialization? “初始化 定义 赋值” 之间的联系与区别
“初始化 定义 赋值” 之间的联系与区别 本来很早之前就想写个blog,说说这三个家伙的区别和联系,三者之间各种联系,很难比较清楚的讲明白,感觉当时好像分析思路还不够“完整”。今天遇到别人抛出来的一个问题。根本的问题是和初始化和赋值有关系,于是留下这个blog。#include struct _ANIBMP{ int FirstNu原创 2014-04-29 13:35:12 · 1519 阅读 · 0 评论 -
关于静态变量“赋值无效问题”的探讨结果
吐槽一下百度空间就是渣,换空间鸟。。。。今天遇到一个关于静态变量“赋值”,值不变的问题。顿时觉得不可理解,很是奇怪关于静态变量问题的探讨 在这里是static int num = 1 在第一次赋值之后,貌似num = 1 这句话就没了作用,让人觉得“很奇怪”,虽然大家都知道,static 储存在静态内存里面,但是怎么就不管那个赋值语句了呢? 首先,要搞清楚这个问题原创 2013-08-04 03:23:30 · 7786 阅读 · 3 评论 -
C语言中 ##和#的作用
##和#今天应该是“长见识”了,毕竟#用的多,但是##我用的太少了。或者说,我感觉##在代码里面出现的频率没有#高,以至于让我感到惊奇看到高手写的一篇blog,感觉良好。。。。嘿嘿关于##不要把问题复杂化了,记住下面这句话,然后看下面的demo#是把宏参数变为一个字符串,##是把两个宏参数连接在一起。原创 2014-06-09 22:13:38 · 1393 阅读 · 0 评论 -
__FUNCTION__, __LINE__ 有助于debug的宏定义
__FUNCTION__, __LINE__ 今天无意之间看到一段代码,里面有这样一个片段: if (!interface) { err ("%s - error, can't find device for minor %d", __FUNCTION__, subminor); retval = -ENODEV; goto exit; }这原创 2014-08-17 22:16:21 · 1622 阅读 · 0 评论 -
一步步走向国际乱码大赛-- 恶搞C语言
大家都一直强调规范编码,但是这个世界上有个大师们娱乐的竞赛——国际乱码大赛。 能写出来的都是对语言深入了解的master。我从没想自己也能“恶搞”C,一直都是老老实实编码。就在前几天看了一篇帖子。感觉把很规范的代码变成乱码,很有意思。于是决定动手试一试。 我不得不说。。。我以为看起来还简单的东西,搞了我一天,我去。。。各种bug。。。不过也有很大的原创 2014-05-02 21:35:44 · 14015 阅读 · 6 评论 -
关于switch语句“想多了”
今天正给项目写代码的时候发现想用switch语句,写的时候有点困惑.一般的switch都是这样swith(constant){ case 1: statement;break; case 2: statement;break; ... default: break;}每一个case 都是一个原创 2014-09-24 13:28:52 · 1286 阅读 · 0 评论