
c/c++
文章平均质量分 69
douyuhua0918
这个作者很懒,什么都没留下…
展开
-
用c语言实现ping
分类: C Programming 2012-04-15 22:46 10人阅读 评论(0)收藏 举报ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具。ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者,这有点象潜水艇声纳系统中使用的发声装置。例如,在Linux终转载 2012-04-17 07:05:59 · 434 阅读 · 0 评论 -
c语言关键字之 extern
【转】 extern可以修饰变量和函数,表示该变量或者函数在其它地方被定义(本源文件或其它源文件内,见注[1]),在这里声明使用它,这样多个源文件共享变量和函数;多个c源文件的编译是独立的,所以编译器无法判断多个源文件共享的变量的类型是否一致(只判断变量名或函数名是否一致); 等到链接的时候(这个阶段已经不再进行语法检查了),多个源文件编译后的.o文件链接成一个目标文件,如果有一个转载 2012-04-28 11:46:18 · 397 阅读 · 0 评论 -
C语言可以给字符数组赋值的方法
(2011-12-29 20:24)标签: C语言 分类: Memory_layoutchar a[10];怎么给这个数组赋值呢?1、定义的时候直接用字符串赋值char a[10]="hello";注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!2、对数组中字符逐个赋值char a[10]=转载 2012-04-14 11:24:01 · 431 阅读 · 0 评论 -
const详解
(2012-02-12 20:37)分类: Key_Word基本解释 const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面转载 2012-04-14 11:25:37 · 350 阅读 · 0 评论 -
声明和定义的区别
声明和定义的区别 (2012-03-22 14:34)标签: declare_define 分类: C_Language变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。变量声明:用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。extern关键字:通过使用extern关键字声明变转载 2012-04-13 16:43:41 · 350 阅读 · 0 评论 -
C语言关于补码的解释及误区
(2012-02-17 00:32)标签: C语言 分类: Numerical_storage加法器计算机里面,只有加法器,没有减法器,所有的减法运算,都必须用加法进行。即:减去某个数字(或者说加上某个负数)的运算,都应该研究如何用加法来完成。模、补数在日常生活当中,可以看到很多这样的事情:把某物体左转 90 度,和右转 27转载 2012-04-13 17:03:39 · 416 阅读 · 0 评论 -
有符号数和无符号数负数
(2012-02-17 01:23)分类: Numerical_storage理解有符号数和无符号数负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答。 一种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切。再者,用“补码”表示负数,其实一种公式,公式的作用转载 2012-04-13 17:03:04 · 516 阅读 · 0 评论 -
malloc()和free()的基本概念以及基本用法
1、函数原型及说明:void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,应该有多种,比如说空间不足就是一种。void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内转载 2012-04-13 17:00:20 · 280 阅读 · 0 评论 -
C语言中的函数指针
(2012-03-03 14:01)标签: C语言函数和指针 分类: Function1:简介函数在内存中有一个物理位置,而这个位置是可以赋给一个指针的。函数名就是函数的地址就是该函数的入口点。因此,函数指针可被用来调用一个函数。函数的地址是用不带任何括号或参数的函数名来得到的。(这很类似于数组地址的得到方法,即,在只有数组名而无下标是就得到数组地址。)转载 2012-04-13 16:52:31 · 351 阅读 · 0 评论 -
内存管理malloc的一些注意事项
(2012-03-08 13:08)标签: 内存管理 分类: C_Language内存的使用规则:在使用malloc()或new申请空间时,要检查有没有分配空间成功,判断方法是判断指针是否为NULL,如申请一块很大的内存而没有这么大的内存则分配内存会失败;申请成功后最好是将该内存清空,使用memset()后ZeroMemory()清空转载 2012-04-13 16:50:07 · 561 阅读 · 0 评论 -
exit函数与return的区别
(2012-03-21 13:37)分类: Process exit(int n)其实就是直接退出程序,因为默认的标准程序入口为 int main(int argc, char** argv),返回值是int型的。一般在shell下面,运行一个程序,然后使用命令echo $?就能得到该程序的返回值,也就是退出值,在main()里面,你可以用return n,也能够直接用转载 2012-04-13 16:45:42 · 389 阅读 · 0 评论 -
Linux启动为什么没有先执行main函数
Linux启动为什么没有先执行main函数 学过C语言的都知道,用C语言设计的程序都有一个main函数,而且是从main函数开始执行的。Linux 0.11的代码是用C语言编写的,奇怪的是,为什么在操作系统启动是执行的是三个由汇编写成的程序,然后才开始执行main函数?为什么不像我们熟知的C程序那样,从main函数开始执行呢? 通常,我们用C语言编写的程序都是用户应用程序,这类程序的执行有一个重要转载 2012-04-12 11:23:03 · 1815 阅读 · 0 评论 -
浅析函数传参及返回值
作者:曹忠明,华清远见嵌入式学院讲师。很多刚学指针的人多会遇到这样的情况,就是你给一个函数传递一个指针变量,在这个函数中为这个指针申请空间,赋值,可是等函数结束后这个指针还是一个空指针,对其的操作编译器会报段错误或干脆给你一个莫名其妙的值,这是一个随机数。如:#include #include int my_fun(int *p) {转载 2012-04-06 12:45:43 · 271 阅读 · 0 评论 -
printf函数的一些理解
问题:调用printf("%.1f%s",0.0,"a");的输出是0.0a而调用printf("%.1f%s",0,"a");的输出是0.0@第二个输出的字符并不是“a”(ASCII码97),而是“@”(ASCII码64),在VC 6下。为什么?具体原因。 解答:1,查看两句话的反汇编1) printf("转载 2012-04-12 09:28:48 · 395 阅读 · 0 评论 -
进程 过程调用 函数调用
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://nforcex.blogbus.com/logs/7537173.html我们在这里拿最典型且开源的Unix/Linux平台举例:1. 进程进程:程序的一次动态执行过程,是操作系统管理系统活动的基本单位。从内核的角度看,进程是系统中的一个对象,它对应一个程序的执行流并且是一个资源分配(包括转载 2012-04-12 10:56:15 · 650 阅读 · 0 评论 -
extern和static释析
注意:下文中提到的“变量”或“函数”均指的是“全局”的,同时也请大家务必注意声明和定义的措辞(实际上,我这么说是有错误的,因为函数就没有全局和局部之分,其实函数都是全局的,例如我们在A文件中定义了一个函数void fun(){},在B文件中直接就可以利用,[extern] void fun(); void main(){fun();})extern g_A;//这是声明,而且是一个int型转载 2012-05-02 11:55:59 · 316 阅读 · 0 评论 -
void const return 结构体对齐
void 不能代表一个真实的变量,因为定义变量必须分配内存空间。 return return不能指向"栈内存"的"指针",因为该内存在函数体结束时被自动销毁。 return; 返回的是什么呢? const 命名被替换为 readonly 或许更好。 修饰只读变量;节省空间,避免不必要的内存分配,同时提高效率(编译器通常不为普通const只读变量分配存转载 2012-05-02 11:49:24 · 560 阅读 · 0 评论 -
常用数据类型对应字节数
一:常用数据类型对应字节数 可用如sizeof(char),sizeof(char*)等得出 32位编译器: char:1个字节 char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) shor转载 2012-05-07 15:06:29 · 679 阅读 · 0 评论 -
关于stdint.h头文件
stdint.h是c99中引进的一个标准C库的头文件. stdint.h中定义了一些整数类型,规则如下(其中N可以为8,16,32,64) intN_t, int_leastN_t, int_fastN_t表示长度为N位的整型数; uintN_t, uint_leastN_t, uint_fastN_t表示长度为N位的无符号整型数 ; stdint.h中的常量转载 2013-02-03 22:54:28 · 1436 阅读 · 0 评论 -
free 2012-12-21
今天在网上看到了这样一个问题,“如果malloc 了一块字符串的内存,然后,它改变了这个字符串的大小,问会不会有一部分内存没有被释放掉。”这个问题,以前的确没有仔细想过。 当然,我觉得是肯定会释放掉的,但是一直没有了解过free 的原理,不敢乱说。我看了一下操作系统的内存管理,基本上是这样的,当然各个系统的实现不一样。 操作系统管理内存,维护了一个空闲内存链表,malloc从个链表中选转载 2012-12-21 15:53:11 · 523 阅读 · 0 评论 -
linux下gcc编译生成静态及动态库
在Linux下如何使用GCC编译程序、简单生成 静态库及动态库。本文适用于Linux下开发初学者。本文初步讲解在Linux下如何使用GCC编译程序、简单生成静态库及动态库。一、关于安装。一般系统默认是安装好编译器的,并且网络上有大量资料介绍不同发行版本下的安装问题,本文不再描述。二、C编程中的文件后缀名介绍.a 静态库(打包文件).c 未经过预处理的C源码.h转载 2012-12-21 11:36:13 · 442 阅读 · 0 评论 -
指针-----函数指针
指针-----函数指针2010-09-07 17:05函数指针的声明:函数指针包括两部分信息:1).函数本身的内存地址2).函数参数和返回值类型信息因此,声明一个函数需要包括以下三部分内容:1)函数返回值类型2)指向函数的函数指针名3)函数参数类型列表函数指针声明通式: return_type (*fun_pointer_转载 2012-05-25 09:32:39 · 515 阅读 · 0 评论 -
浅谈C中的malloc和free
一、malloc()和free()的基本概念以及基本用法:1、函数原型及说明:void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,应该有多种,比如说空间不足就是一种。void free(void *FirstByte): 该函数转载 2012-05-14 17:19:26 · 391 阅读 · 0 评论 -
冒泡
最近有个想法:工作之余,在linux下,用c/c++把常用的算法重写一遍。当然,对算法的认识,我仅限于皮毛,我不可能超越那些前辈先知,但我仍想,用自己的方式演示一遍,只当自娱自乐吧!秉承一贯的原则,不讲大道理,只演示关键代码demo,开始算法之旅的第一个算法-----冒泡排序。1、编辑文件BubbleSort.c,内如如下:1.#include 2.void bubbleSort转载 2012-05-13 00:13:05 · 381 阅读 · 0 评论 -
程序段及const
一.C语言程序的存储区域1.由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-连接三个阶段。编译过程把C语言文本文件生成汇编程序,汇编过程把汇编程序形成二进制机器代码,连接过程则将各个源文件生成的二进制机器代码文件组合成一个文件。 2.C语言编写的程序经过编译-连接后,将形成一个统一文件,它由几个部分组成。在程序运行时又会产生其他几个部分,各个部分代表了不同的存转载 2012-05-12 23:04:52 · 1054 阅读 · 0 评论 -
静态链接库
在C语言的层面上,对代码的重复利用通常是通过库(library)的方式来实现的。传统意义上的库指的是以后缀.a结尾的文件。严格来讲,函数库应当分为两种:静态链接库和动态链接库,也称动态共享库。静态链接库通常是指以.a为后缀的文件,而动态链接库则常常以.so为后缀名。静态链接库其实就是把一个或多个目标文件(即编译生成的.o文件)归档在一个文件中。此后,当需要使用这个静态库中的某个功能时,将这个静转载 2012-05-13 00:11:56 · 675 阅读 · 0 评论 -
创建动态链接库
创建动态链接库:#gcc –shared –Wall –fPIC bar.o foo.o –olibfoobar.so 或手动指定库路径$ gcc -o foobar main.c-llt -B /path/to/lib 这里的-B 选项就添加 /path/to/lib 到gcc搜索的路径之中。这样链接没有问题但是方法II中手动链接好的程序在执行时候仍旧需要指定库路径(链接转载 2012-05-13 00:10:42 · 451 阅读 · 0 评论 -
EOF
EOF是 End Of File 的缩写。在C语言中,它是在标准库中定义的一个宏。(1) 判断文件结束多数人认为文件中有一个EOF,用于表示文件的结尾. 但这个观点实际上是错误的,在文件所包含的数据中,并没有什么文件结束符. 对getc 而言, 如果不能从文件中读取,则返回一个整数 -1,这就是所谓的EOF. 返回 EOF 无非是出现了两种情况,一是文件已经读完; 二是文件读取出错,反正是转载 2012-05-13 00:09:22 · 586 阅读 · 0 评论 -
linux库文件
Linux 的库文件[日期:2012-04-10] 来源:Linux社区 作者:yangzhongxuan 1.什么是库在windows平台和linux平台下都存在着大量的库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。转载 2012-05-12 22:18:00 · 619 阅读 · 0 评论 -
详解C中volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序: short flag;转载 2012-05-12 21:35:35 · 323 阅读 · 0 评论 -
Linux系统C语言学习总结
Linux系统C语言 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未减退。C 语言继续吸引着众多的开发者,他们为了编写、移植或维护应用程序而必须学习新技能。 本文是为了满足对C语言初学者或想提高自身C语言修为的开发人员的需要而写的。希望对您的学习和工作有所帮助。您也许不赞同其中的某些方法,但我们希望您会喜欢其中的一些。 本文不介绍作为一个程序员应掌握得语言细节,而转载 2012-05-12 21:29:06 · 429 阅读 · 0 评论 -
编译器如何工作
编译器一直是我比较喜欢的话题。编译器是个比较神奇的工具,它可以把原来毫无意义的字符数据转变成一行一行可以执行的代码。作为每一个科班出身的同学来说,编译原理都是专业学习中必须经历的一个部分。只是在后来的工作中,真正从事编译器开发的同学少之又少,但是如果你懂得了编译原理的相关机理,会给你的工作带来很大的帮助。关于编译原理的书很多,网上可以搜一下有阿霍版本的《编译原理》,有陈火旺院士的《编译原理》,张素转载 2012-05-09 08:56:35 · 553 阅读 · 0 评论 -
swap函数调用过程分析
分类: C和C++一.环境: x86/WinXP/VC 6.0二.用例:int swap(int a, int b){ int v; v = a; a = b; b = v; return v;}void main(void){ int a = 7; int b = 10; int c = 0; c = swap(a转载 2012-04-12 09:05:14 · 1288 阅读 · 0 评论 -
const 进行一下详细的分析
最近一直在阅读Linux内核源代码,发现const用处很多,不禁感叹Linux内核代码真是把C语言应用的淋漓尽致!今天就专门对! const的作用就不说了,地球人都知道!(一)直接看代码: int a=10;a=9; 以上两句史上最简单的代码肯定编译通过!再看…… const int a 10;a=9; 再次编译就通不过了吧!因为转载 2012-04-11 18:01:04 · 284 阅读 · 0 评论 -
变量存储(内存)
变量的内存分布分类: C/C++2010-05-02 16:54 40人阅读 评论(0) 收藏 举报const变量存储在.rodata(read only)区域; char* p = "abcd"; p指向的是静态文本区域.text .rodata 和 .text 被合并为一个segment,由OS保护起来,只可读。 register变量存放在.bs转载 2012-04-12 10:13:36 · 359 阅读 · 0 评论 -
c语言编译过程详解
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下: 编译过程 一、编译过程 编译过程又可以分成两个阶段:编译和会汇编。转载 2012-03-20 20:32:06 · 364 阅读 · 0 评论 -
从char**无法赋给 const char**的原因,谈谈const限定符
作者:gfree.wind@gmail.com博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。=========================转载 2012-03-20 20:06:27 · 955 阅读 · 1 评论 -
关于c语言中变量赋值问题
局部变量:也叫内部变量,是在一个函数内部定义的,其作用域限制在所定义的函数中,不可在其它函数中使用,而该函数也不可以使用其它函数所定义的局部变量。函数的形式参数被认为是局部变量,在函数被调用时才会在内存的动态存储区中开辟存储单元。函数调用结束时,与此函数内的其他局部变量一样释放所占有的内存单元。局部变量的存储类型可以通过类型标示符auto和static来规定。利用auto定义的变量存放在动态存储区转载 2012-03-20 20:10:30 · 1292 阅读 · 0 评论 -
二级C语言常见易错题
1. 数据溢出int a = 32767;a = a + 1; 此时a的值为 –327682. (-1)&&(-1) 值为:1非0的数,逻辑值均为1只有数0,逻辑值为03. 设a=5, b=6, c=7, d=8, m=2, n=2执行 (m = a > b) && ( n = c > b)结果:n 的转载 2012-03-20 20:08:14 · 3244 阅读 · 1 评论 -
C的表达式 x == x,何时为假
作者:gfree.wind@gmail.com博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 今天的问题很有趣,C的表达式 x == x,何时为假呢?即下面的代码: if (x== x){ printf("Equal\n"); } else {转载 2012-03-20 20:02:12 · 1082 阅读 · 0 评论