c
ready_gogo
这个作者很懒,什么都没留下…
展开
-
Linux启动为什么没有先执行main函数
学过C语言的都知道,用C语言设计的程序都有一个main函数,而且是从main函数开始执行的。Linux 0.11的代码是用C语言编写的,奇怪的是,为什么在操作系统启动是执行的是三个由汇编写成的程序,然后才开始执行main函数?为什么不像我们熟知的C程序那样,从main函数开始执行呢? 通常,我们用C语言编写的程序都是用户应用程序,这类程序的执行有一个重要的特征,就是必须在操作系统的平台上执行,这也转载 2013-02-19 18:19:05 · 473 阅读 · 0 评论 -
malloc(0)返回什么地址?
问题内容:malloc(0)返回什么地址? 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=4351400所属论坛:C语言 审核组:C/C++提问者:jidahyx解决者:steedhorse感谢:steedhorse关键字: 答案:char *p = (char *)malloc(0); strcp转载 2013-02-21 15:45:55 · 324 阅读 · 0 评论 -
指针指向的字符串不能修改
char* str = "resource";str[6] = 'k'; //这句报内存写入错误*(str+6) = 'k'; //这样写同样报错 但是这样就没问题:char* str = new char[12];strcpy(str, "resource");str[6] = k; //没问题*(str+6) = 'k'; //没问题 这样转载 2013-02-21 17:30:47 · 458 阅读 · 0 评论 -
嵌入式开发.C语言面试题
预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直转载 2013-02-21 17:28:27 · 393 阅读 · 0 评论 -
C语言编译全过程
编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 编译的完整过程:C源程序-->预编译处理(.c)-->编译、优化程序(.s、.asm)-->汇编程序(.obj、.o、.a、.ko)-->链接程序(.exe、.elf、.axf等)1.转载 2013-02-21 17:25:13 · 288 阅读 · 0 评论 -
malloc calloc realloc 区别
ANSI C说明了三个用于存储空间动态分配的函数(1) malloc 分配指定字节数的存储区。此存储区中的初始值不确定(2) calloc 为指定长度的对象,分配能容纳其指定个数的存储空间。该空间中的每一位(bit)都初始化为0(3) realloc 更改以前分配区的长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定转载 2013-02-21 16:17:45 · 258 阅读 · 0 评论 -
浅析malloc()的几种实现方式
malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。 动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小转载 2013-02-21 17:18:26 · 323 阅读 · 0 评论 -
教你理解复杂的C/C++声明
介绍 曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明:我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。需要强调一下的是,复杂的C/C++声明并不是好的编程转载 2013-02-21 15:34:01 · 194 阅读 · 0 评论 -
指针与数组关系
指针是C语言中的精髓。《高质量C++编程指南》的作者林锐就曾说过:不会正确使用指针,肯定算不上是合格的程序员。昨晚我思考了一宿,自认找到了理解指针的正确途径。本文试图通过探究指针和数组的关系去研究指针。一般的C语言教科书上都会有这样的话:指针就是地址,数组名就是指针的首地址。这些不能不说是错误的,但是却没有深入进去,学生很难有较深的理解。我认为从本质上看,数组是一个单独的内存块,指针是单独转载 2013-02-20 11:57:53 · 478 阅读 · 0 评论 -
指针与数组
总结:一个指针变量,用数组方式访问指针所指向的数值时,可以把数组下表的形式转化成指针的形式,转化完成后,如果地址有效,则用数组的方式访问指针所指向的数值是合法的。例如, struct S { int a, int b, }s; int *p=&s.a原创 2013-02-20 09:33:35 · 333 阅读 · 0 评论 -
c语言中程序段
根据C语言的特点,每一个源程序生成的目标代码将包含源程序所需要表达的所有信息和功能。目标代码中各段生成情况如下:1.代码段(Code) 代码段由程序中的各个函数产生,函数的每一个语句将最终经过编译和汇编生成二进制机器代码(具体生成哪种体系结构的机器代码由编译器决定)。 ? 顺序代码 基本数学运算(+,-),逻辑运算(&&,||),位运算(&转载 2013-02-20 09:21:04 · 349 阅读 · 0 评论 -
extern
全局变量(外部变量)是在函数的外部定义的,它的作用域为从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为本文件中各个函数所引用。编译时将全局变量分配在静态存储区。有时需要用extern来声明全局变量,以扩展全局变量的作用域。1. 在一个文件内声明全局变量全局变量的作用域:只限于定义处到文件终了 其定义点之前不可使用 想用 可以在定义点之前对该变量前+extern原创 2013-02-19 18:11:01 · 255 阅读 · 0 评论 -
结构体对齐
按其成员中最大的自身值对齐,是成员最大自身值的整数倍 注:各变量自身值:int 4 long4 floart4 double4 Char 1如果有#parma pack(n) 结构体自身值要为n的整数倍成员对齐:按其成员中最大的自身值对齐如果有#parma pack(n) 将n与最大自身值比较 按两者中最小的对齐原创 2013-02-19 18:10:08 · 223 阅读 · 0 评论 -
内核链表中的 container_of
一:container_of宏定义在[include/linux/kernel.h]中:#define container_of(ptr, type, member) /const typeof( ((type *)0)->member ) *__mptr = (ptr); /(type *)( (char *)__mptr - offsetof(type,member)转载 2013-04-13 15:14:23 · 458 阅读 · 0 评论