Linux C程序设计
文章平均质量分 59
伊娃码力
这个作者很懒,什么都没留下…
展开
-
C中变量的定义?声明?
<br />什么是定义?什么是声明?他们有什么区别?<br />举个例子:;<br />A) int i;<br />B)extern int i;<br /> <br />什么是定义:所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给他取一个名字,这个名字就是我们经常所说的变量名或对象名。但注意,这个名字一旦和这块内存匹配起来(可以想象是这个名字嫁给了这块空间,没有要彩礼啊。^_^),他们就同生共死,终生不离不弃。并且这块内存的位置也不能被改变。一个变量或对象在一定的区域内(比如函数内,全局原创 2010-10-07 15:43:00 · 734 阅读 · 0 评论 -
C++函数声明和定义的原因和作用
<br />原帖地址:<br />http://hi.baidu.com/catro/blog/item/8727c15c4224334ffbf2c052.html<br /><br /><br />声明是告诉编译器一些信息,以协助编译器进行语法分析,避免编译器报错。而定义是告诉编译器生成一些代码,并且这些代码将由连接器使用。即:声明是给编译器用的,定义是给连接器用的。这个说明显得很模糊,为什么非要弄个声明和定义在这搅和?那都是因为C++同意将程序拆成几段分别书写在不同文件中以及上面提到的编译器只从转载 2010-10-21 17:04:00 · 2317 阅读 · 0 评论 -
C语言程序编译的内存分配,堆与栈的区别
C语言程序编译的内存分配:1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等;2.堆区(heap) --由程序员分配释放;3.全局区或静态区 --存放全局变量和静态变量;程序结束时由系统释放,分为全局初始化区和全局未初始化区;4.字符常量区 --常量字符串放与此,程序结束时由系统释放;5.程序代码区例: //main.cint a=0; //全局初始化区char *p1; //全局未初始化区void main()转载 2010-10-23 11:58:00 · 644 阅读 · 0 评论 -
交换两个变量,而不引用第三个变量
<br />前几天同学去面试,聊了聊,说到一个问题,交换两个变量而不引入第三个变量,可能是我太RZ,不清,从网上找了找,写个例子如下:<br />(主要利用了--异或 操作!位操作)<br /> 1 #include<stdio.h><br /> 2 <br /> 3 void swap(int *a ,int *b);<br /> 4 int main()<br /> 5 {<br /> 6 int a ,b;<br /> 7 pr原创 2010-11-01 18:03:00 · 683 阅读 · 0 评论 -
指针数组和数组指针(一)
<br />C中这种该死的术语有很多,一直也不知道该怎么去理解,真是头疼死了,今天参考了网上的一些文章,自己写了一个小程序,算是有点理解。<br /><br /><br />先来介绍一下指针: 指针一种类型,理论上来说它包含其他变量的地址,因此有的书上也叫它:地址变量。既然指针是一个类型,是类型就有大小,在达内的服务器上或者普通的PC机上,都是4个字节大小,里边只是存储了一个变量的地址而已。不管什么类型的指针,char * ,int * ,int (*) ,string * ,float * ,原创 2010-11-01 20:10:00 · 921 阅读 · 0 评论 -
main函数返回值return 0
<br />原贴地址:<br />http://guoyueheng148.blog.163.com/blog/static/601670912008101601041259/<br /><br /><br />main函数,是C/C++程序中唯一可以直接运行的函数,其他函数都直接或间接由其调用执行。C/C++程序的执行开始于main()函数,一个结构良好的C/C++程序也应该结束于该函数。 renturn后面跟的值,代表main函数给操作系统的返回值,代表函数的执行状态!! 返回几都没有关系,因为你并没有转载 2010-11-02 10:48:00 · 3441 阅读 · 1 评论 -
边界对齐---CSDN的一个帖子,说的挺不错的
<br />原帖地址:<br />http://blog.csdn.net/feijj2002_/archive/2007/05/03/1595163.aspx<br /><br /><br /><br /><br />结构体对齐的具体含义(#pragma pack)<br />作者:panic 2005年4月2日<br />还是来自csdn的帖子:<br />主 题: 探讨:内存对齐<br />作 者: typedef_chen ((名未定)(我要骗人))<br />等 级:转载 2010-11-02 20:10:00 · 693 阅读 · 0 评论 -
字节对齐详解
<br />(http://www.yuanma.org/data/2006/0723/article_1213.htm)一.什么是字节对齐,为什么要对齐?<br /> 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。<br /> 对齐的作用和原因:各个硬件平台对存储空间的原创 2010-11-02 20:20:00 · 507 阅读 · 0 评论 -
内存字节对齐---代码实现(自己整理的,这是一切字节对齐最本质的东西)
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生转载 2010-11-02 20:56:00 · 1492 阅读 · 0 评论 -
换行符‘/n’和回车符‘/r’ 以及 ASCII码表
<br />原文地址:http://blog.sina.com.cn/s/blog_5d236e060100dup8.html<br /> <br />换行符‘/n’和回车符‘/r’<br />换行符‘/n’和回车符‘/r’<br />顾名思义,换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符 <br />'/n' 10 换行(newline)<br />'/r' 13 回车(return)<br /><br />也可以表示为'/x0a'和'/x0d'.转载 2010-11-07 01:02:00 · 9672 阅读 · 0 评论 -
*** glibc detected *** ./test: free(): invalid pointer: 0x0854d1b4 ***
<br />*** glibc detected *** ./test: free(): invalid pointer: 0x0854d1b4 ***<br />======= Backtrace: =========<br />/lib/tls/i686/cmov/libc.so.6(+0x6b591)[0x208591]<br />/lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0x209de8]<br />/lib/tls/i686/cmov/libc.so原创 2010-11-11 16:58:00 · 3997 阅读 · 1 评论 -
C/C++中宏使用(关于## 和...变参宏)
<br />今天看ffmpeg源码,看到一坨一坨的<br />#define REGISTER_HWACCEL(X,x) { /<br /> extern AVHWAccel ff_##x##_hwaccel; /<br /> if(CONFIG_##X##_HWACCEL) av_register_hwaccel(&ff_##x##_hwaccel); }<br />#define REGISTER_ENCODER(X,x) { /<br /> ext转载 2011-03-07 15:45:00 · 4674 阅读 · 1 评论 -
用grep查找指定目录及其子目录下的特定文件类型
<br />grep用来查文件内容比较方便, <br />grep -r hello /root <br />可以找到/root目录及所有子目录中内容包含 'hello '的文件。 <br /><br />但你如果是找某种文件类型,用find会更方便 <br />find /root -name '*.h ' <br />可以找到/root目录及所有子目录中文件名以 '.h '结尾的文件。<br /><br />转载 2011-05-16 12:28:00 · 6272 阅读 · 1 评论 -
C中结构体赋值问题
C中结构体赋值问题一直没有很清楚,下面发了一个讨论的帖子,自己写了个简单的例程测了下: #include struct test{ int a; int b; char c; float d;}; int main(){ struct test test_num = {0};原创 2011-06-07 16:17:00 · 1296 阅读 · 0 评论 -
How to use # inside a macro definition - 宏定义嵌套问题
昨天下午写一个宏定义带嵌套的一直报语法错误;类似这样的一个宏定义 #define exmp(par1,par2) {/#ifdef EVAL / par1 = par2; /#endif / } 从网上查了查,具体这里有没有优先级问题还不是很确定---http://bytes.com/topic/c/answers/472611-possible-原创 2011-06-09 11:24:00 · 4959 阅读 · 0 评论 -
scanf这个函数--论坛里的一个帖子
<br />原帖地址:http://topic.csdn.net/u/20110423/19/a1e4c5ae-5b44-4e94-8f2c-55f7ba6486de.html<br /> <br />int a; <br />char b; <br />printf("请输入a的值");<br />scanf("%d",&a);<br />getchar()//假如这里不加getchar,那么后面的输入都直接无效了<br />printf("请输入b的值:");<br />scanf("%c",&b);<转载 2011-04-25 23:13:00 · 867 阅读 · 0 评论 -
数据
<br /><br />Ø 基本数据类型<br />C语言中只有4中基本数据类型——整型、浮点型、指针和聚合类型(如数组和结构等);所有其他类型都是从这4种基本类型的某种变化或组合派生而来。<br />一、整型家族<br />整型家族包括char、short int、int和long int,并且都分为signed和unsigned型。<br />int型字长问题:<br />long int型至少应该和int型一样长,而int型至少应该和short int一样长。<br />① C/C转载 2011-05-11 10:28:00 · 1367 阅读 · 0 评论 -
C变量和函数的声明和定义
<br />原文地址:<br />http://blog.chinaunix.net/u2/68846/showart_1131623.html<br /> <br /> <br />一 变量 (variable)<br />声明:变量声明用于说明变量的属性(主要是变量的类型)<br />定义:变量定义除了需要声明之外,还引起了存储器分配。<br /> Declarations and Definitions <br />As we'll see in Section 2.9 (p. 67),转载 2010-10-21 17:02:00 · 1235 阅读 · 0 评论 -
one's complement & two's complement
<br />原帖地址:http://www.edwardbosworth.com/My5155_Slides/Chapter02/TwosComplement.pdf<br /> <br />Two’s Complement Arithmetic<br />We now address the issue of representing integers as binary strings in a computer.<br />There are four formats that have been转载 2010-10-22 18:55:00 · 3413 阅读 · 0 评论 -
使用__FILE__和__LINE__定位错误
<br />原帖地址:http://www.cppblog.com/heath/archive/2008/08/05/58046.html<br /> <br />[前言:使用__FILE__和__LINE__来定位错误已经屡见不鲜,然而其中一些道理又有几个人仔细探究过。本文参考了Curtis Krauskopf的一篇名为Using __FILE__ and __LINE__ to Report Errors的文章,希望达到解惑之效。]<br /><br />问题:当运行时错误产生时,我怎样才能得到包含转载 2010-10-21 20:42:00 · 625 阅读 · 0 评论 -
C中Char类型 ----%d %c
Char 字符型,占用一个字节,可以存放本地字符集中的一个字符默认情况下是 signed char类型—表示范围: -128 ~+127Unsigned char类型表示范围: 0 ~ 255实例一:#includeint main(){char ch;scanf("%d" ,&ch);printf("%d /n" ,ch);printf("%c /n" ,ch);return 0;}结果:解释:在上述这段代码中,从键盘输入的数是作为一个 int类型存放到变量ch中的,所以printf("%d /n" ,原创 2010-10-08 17:35:00 · 6958 阅读 · 1 评论 -
C 语言中空格,空字符
<br /> 空格符号和空字符是不一样的,在ASCII里面,空格(space)符号的ASCII码是0x20,而空字符是0x0,2个是完全不一样的2个字符。<br /><br /> 空字符一般来描述一个字符串的结尾,其实是控制符的一种,但不能理解为没有字符,应该理解为代表什么都没有的字符。好比回车0x0A和换行0x0D虽然不显示,但是也是控制字符的一种。(这些字符以前是用于打印机的,所以很多都没有用了) <br /><br /> 字符串的概念:在C语言中,字符串是指由若干个有效转载 2010-10-09 12:00:00 · 26291 阅读 · 1 评论 -
计算机中的原码、反码和补码
大家都知道数据在计算机中都是按字节来储存了,1个字节等于8位(1Byte=8bit),而计算机只能识别0和1这两个数,所以根据排列,1个字节能代表256种不同的信息,即28(0和1两种可能,8位排列),比如定义一个字节大小的无符号整数(unsigned char),那么它能表示的是0~255(0~28-1)这些数,一共是256个数,因为,前面说了,一个字节只能表示256种不同的信息。别停下,还是一个字节的无符号整数,我们来进一步剖析它,0是这些数中最小的一个,我们先假设它在计算机内部就用8位二进制表示转载 2010-10-07 15:13:00 · 1719 阅读 · 1 评论 -
闲扯原码、反码、补码
<br /> 相信大家看到这个标题都不屑一顾,因为在任何一本计算机基础知识书的第一章都有他们的解释,但是在书上我们只能找到一些简单的定义,没次看过之后不久就忘了。最近论坛里有人问起这些概念,看到很多人的回复是以前看过现在忘了去看看某某书之类,很少有给出一个合理的解释。于是本人就开始思考(虽然上帝会发笑,我还是要思考。),于是得出了以下的结论。<br /><br /> 数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样转载 2010-10-07 15:17:00 · 420 阅读 · 0 评论 -
C格式化输出(感觉不错!)
一、printf()函数printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("", );其中格式化字符串包括两部分内容:一部分是正常字符, 这些字符将按原样输出, 另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符用来确定输出内容格式。 参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。二、转载 2010-10-08 18:21:00 · 673 阅读 · 0 评论 -
const int *pi 与 int *const pi的区别 (不错)
<br />今天看了一些:彻底搞定C指针中的一些内容,感觉挺好,摘抄如下:<br />1. 从const int i 说起<br /><br />你知道我们声明一个变量时象这样int i ;这个i是可能在它处重新变赋值的。如下:<br />int i = 0;<br />/* . . . */<br />i = 20; /*这里重新赋值了*/<br />不过有一天我的程序可能需要这样一个变量(暂且称它变量),在声明时就赋一个初始值。之后我的程序在其它任何处都不会再去重新对它赋值。那我又应该怎么办呢?用con转载 2010-10-09 16:34:00 · 874 阅读 · 0 评论 -
C中的自增运算符 、自减运算符
<br />自增与自减运算符只能作用于变量,类似于表达式(i + j)++ 是非法的。<br />试了下float类型用自增运算符也可以。<br /> <br />例子:之前错了,还会错吗??不会了!!<br />void main(){<br />int count ,sum;<br />count = 0;<br />sum = 0;<br /> <br />while(count ++ <20){<br />sum +=count;<br />}<br />printf("%d",sum);<br /原创 2010-10-07 16:17:00 · 1025 阅读 · 0 评论 -
Sizeof ---最冤枉的关键字
<br /> sizeof()功能:计算数据空间的字节数;<br /> sizeof是关键字不是函数,其实就算不知道它是否为32个关键字之一时,我们也可以借助编译器确定它的身份。<br /> 看下面的例子:<br /> <br /> ;int i = 0;<br /> A) sizeof(int); B)sizeof(i) C)sizeof int D)sizeof i;<br /> <br /> <br /> 毫无疑问,32位系统下 A ,B的原创 2010-10-09 12:07:00 · 996 阅读 · 0 评论 -
C中打印二进制位数的一个例子----当初学习5的反码打印出来是-6的一个例子(感觉不错的)
<br />/*打印二进制位的函数*/<br />void printB(int i){<br />printf("number %4d" ,i);<br /> <br />int a;<br />for( a = 31; a >=0; a--){<br />int k = (i >>a) &1; //有些符号位可能会是1<br />printf("%d" ,k);<br /> <br />}<br />printf("/ n");<br /> <br />}<br /> <br />void mai原创 2010-10-07 16:31:00 · 1289 阅读 · 0 评论 -
C中数组浅析(一)
今天看--C缺陷与陷阱 的一些收获.数组定义的语法:存储类型 数据类型 数组名[数组长度]存储类型还是那四个。extern 和static 数组元素自动初始化为0;自动数组(auto)中的元素需要分别初始化!!不允许这样定义: int a[] ; //不允许这样定义*******************************************************************************************对于一个数组只能做两件事:1) 确定该数组的大小。---siz原创 2010-10-08 19:20:00 · 644 阅读 · 0 评论 -
C程序编译过程
<br />C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下:<br /><br /><br /><br /><br /> 从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。<br />转载 2010-10-15 16:12:00 · 736 阅读 · 0 评论 -
用GDB调试程序(一)
<br />用GDB调试程序<br />GDB概述<br />————<br />GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。<br />一般来说,GDB主要帮忙你完成下面四个方面的功能:<br /> 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序转载 2010-10-15 17:07:00 · 504 阅读 · 0 评论 -
C中数据类型转换
原帖地址:http://blog.csdn.net/miaouu/archive/2010/01/19/5213042.aspxhttp://hi.baidu.com/i_love_lei_lei/blog/item/32a58b1aa54290ddac6e751f.html一 c中数据类型的隐式转换1、隐式转换 C在以下四种情况下会进行隐式转换: 1、算术运算式中,低类型能够转换为高类型。 2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。转载 2010-10-22 17:45:00 · 2034 阅读 · 0 评论 -
认识(大端--小端)端模式
<br />端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。在计算机业界,Endian表示数据在存储器中的存放顺序。下文举例转载 2010-10-23 12:01:00 · 587 阅读 · 0 评论 -
字符常量包含多个字符的一点思考--有疑问
一。先写段程序来看下机器的大端小端 1 #include 2 /*函数checkCPU判断计算机是使用大端存储还是小端*/ 3 int checkCPU() 4 { 5 union w{ 6 int a; 7 char b; 8 }c; 9 c.a = 1; 10 11 return(c.b == 1); //如果是小端的话,则程序返回1 12 } 13原创 2010-10-24 11:58:00 · 7092 阅读 · 0 评论 -
C语言详解 - 基本数据类型、标识符
原帖地址:http://www.cnblogs.com/jcsu/articles/1317826.html一、基本数据类型1. 基本数据类型的分类:C语言中的三种基本数据类型是:整型、实型、字符型。每种类型又可以分为常量和变量。整型常量:(1) 十进制的整型常量:由数字0~9组成。如:0、10、365、-12等。(2) 八进制的整型常量:以0开头,由数字0~7组成。如:0、010、0365、-012、011等。(3) 十六进制的整型常量:以0x或0X开头,由数字0~9、a~转载 2010-10-21 15:24:00 · 3731 阅读 · 0 评论 -
C/C++中产生随机数(rand,srand用法)
<br />原帖地址:http://zhangjunhd.blog.51cto.com/113473/197020<br /><br />计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。) 我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种转载 2010-10-21 19:57:00 · 1071 阅读 · 0 评论 -
小议C语言中数据的存储类型【喜欢那张内存图】
C语言中的一些说明和定义会用到存储类型这样一个概念,在C语言中存储类型会用到下述几个关键字:auto,static,register,extern。看下面的简略图大家可以明确程序在进行存储时是分为三个区域的,分别为代码段,数据段和bss段,用于存储不同类型和状态的变量,而原创 2011-08-14 23:57:24 · 1036 阅读 · 0 评论