![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux C语言
文章平均质量分 61
我是一只奋斗的小菜鸟
有朋自远方来不亦乐乎!
展开
-
C语言中const的用法
C语言中const的用法基本解释 const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。 问题:转载 2013-05-18 11:39:02 · 774 阅读 · 1 评论 -
brk() 与 sbrk()
brk() , sbrk() 的声明如下:[cpp] view plaincopy#include int brk(void *addr); void *sbrk(intptr_t increment); 这两个函数都用来改变 "program break" (程序间断点)的位置,这个位置可参考下图:转载 2013-10-20 02:58:55 · 1169 阅读 · 0 评论 -
c 中变量
局部变量,全局变量(转)一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放存放:函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类转载 2014-01-02 05:30:42 · 809 阅读 · 0 评论 -
Linux c编程一站式学习笔记(01), switch语句
最近在读这本书, 其中有自己的以前没有掌握好的就写道博客里跟大家分享了.示例程序1.#includevoid print_day(int day){ switch(day) { case 1: printf("Monday\n"); break; case 2: printf("Tuesday\n"); break; case 3: prin原创 2013-12-30 04:12:25 · 635 阅读 · 0 评论 -
Linux c编程一站式学习笔记(06), 位移操作
本文源于本人>总结笔记(一) 位运算注意,&、|、^运算符都是要做UsualArithmetic Conversion的(其中有一步是IntegerPromotion),~运算符也要做IntegerPromotion,所以在C语言中其实并不存在8位整数的位运算,操作数在做位运算之前都至少被提升为int型了,上面用8位整数举例只是为了书写方便。比如:#include原创 2014-01-03 05:06:38 · 1625 阅读 · 0 评论 -
Linux c编程一站式学习笔记(09),段错误
以下内容是>的学习摘录与笔记。首先是先了解一下什么是MMU((Memory Management Unit,), 及有和没有MMU的情况,为什么要有MMU首先引入两个概念,虚拟地址和物理地址。如果处理器没有MMU, 或者有MMU但没有启用, CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Addre原创 2014-01-04 07:25:18 · 1000 阅读 · 0 评论 -
Linux c编程一站式学习笔记(02), Return语句
函数的返回值应该这样理解:函数返回一个值相当于定义一个和返回值类型相同的临时变量并用return后面的表达式来初始化首先提纲挈领的说一下要点:1. 函数返回一个值相当于定义一个和返回值类型相同的临时变量并用return后面的表达式来初始化, 注意return只是传值操作。2. 当检查到一个错误时提前结束当前函数的执行并返回。下面通过一个可以运行的例子来说:#includ原创 2013-12-30 05:35:24 · 1060 阅读 · 0 评论 -
Linux c编程一站式学习笔记(04), debug
#include void foo(void) { int i; printf("%d\n",i); i = 777; } int main(void) { foo(); foo(); return 0; } 这个是"linuxc一站式学习"中的一个小程序,主要是为了讲局部变量的初始化。但是也有bug分析的哲学在里面,原创 2014-01-02 05:34:41 · 724 阅读 · 0 评论 -
Linux c编程一站式学习笔记(07), Side Effect,Short-circuit与SequencePoint小结
这个是>, 详细请查看原书Side Effect,Short-circuit与SequencePoint这个是有sideeffect的一段代码:int a=0;a = (++a)+(++a)+(++a)+(++a);答案应该是Undefined,下面解释为什么是Undefined。我们知道,调用一个函数可能产生SideEffect,使用某些运算符(++-- =复合赋原创 2014-01-03 05:44:06 · 1016 阅读 · 0 评论 -
Linux c编程一站式学习笔记(03), 变量注意点
局部变量可以用类型相符的任意表达式来初始话,而全局变量只能用常量表达式(ConstantExpression)初始化。例如:全局变量pi这样初始化是合法的:double pi = 3.14 +0.0016;但是这样初始化是不合法的:double pi =acos(-1.0);局部变量这样初始话却是可以的。程序开始运行是要用适当的值来初始化全局变量,所以初始值必须保存在编译生成的原创 2014-01-02 05:31:54 · 911 阅读 · 0 评论 -
Linux c编程一站式学习笔记(05), 两个程序对比Continue和Break
/*Break*/#include int main(){ int i; i = 0; while(i<20) { printf("%d ", i); i++; if(i == 10) break; //printf("%d ", i); } printf("\原创 2014-01-02 05:39:39 · 506 阅读 · 0 评论 -
C语言中volatile关键字的作用
一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的转载 2013-05-22 23:40:06 · 747 阅读 · 0 评论 -
C语言scanf函数详细解释
函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。其调用格式为: scanf("",);scanf()函数返回成功赋值的数据项转载 2013-05-22 00:54:27 · 10753 阅读 · 4 评论 -
C/C++ 变量在内存中的存储
首先是寄存器变量存放在寄存器中,其他的变量存放在内存中,下表为内存布局高内存地址栈向下增长,可读可写可执行空洞向上增长堆向上增长,可读可写可执行BSS段(未初始化数据段)向上增长,可读可写不可执行.d原创 2013-05-18 22:30:34 · 1255 阅读 · 0 评论 -
标准输入流中空白字符的怪异 —— 区分 scanf 与 cin
在论坛上看到有人提出一个如下的问题,在此总结一下。原问题:http://topic.csdn.net/u/20110414/22/90d0606c-9876-48e4-9b69-bd8bd8a41897.html #include int main() { int ival1 = 123, ival2 = 1; ch转载 2013-05-19 10:40:09 · 709 阅读 · 0 评论 -
程序员笑话:int类型占几个字节?
一晚下班回家,一民警迎面巡逻而来。突然对我大喊:站住!民警:int类型占几个字节?我:4个。民警:你可以走了。我感到很诧异。我:为什么问这样的问题?民警:深夜还在街上走,寒酸苦逼的样子,不是小偷就是程序员。转载 2013-05-18 22:32:54 · 1210 阅读 · 0 评论 -
C里面的scanf对于空白字符的处理
scanf 中容易犯的添加空白字符的错误在scanf里面的第一个参数——格式化字符串s里面的空白字符的作用是对于输入里面的空白字符进行匹配。在s里面的连续空白字符都会被当成一个空白字符处理。而一个空白字符对应输入里面的一段连续空白字符。当进行匹配的时候,他会一直匹配到下一个非空字符的出现才停止。所以,如果有下面的语句:int tmp;scanf("%原创 2013-05-19 08:09:41 · 1292 阅读 · 0 评论 -
用移位运算实现一个整数二进制形式的输出--简短程序分析
#include intmain (){const int bits = sizeof(int)*8; //一个字节8位,算出是多少位的运算,如32,64unsigned int mask = 1int n;printf ("Please input an integer: ");scanf ("%d", &n);int i;for ( i=0; i原创 2013-05-19 23:20:35 · 1027 阅读 · 0 评论 -
Sizeof与Strlen的区别与联系
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所转载 2013-05-22 00:57:43 · 823 阅读 · 0 评论 -
内存中的对齐与补齐
首先通过一个简短的程序进行分析:#include typedef struct goods{char name[18];//18double price;//8char charge;//1int num; //4short saled; //2}gs;intmain (){printf ("%d\n", sizeof原创 2013-05-21 17:55:53 · 766 阅读 · 0 评论 -
C/C++中的内存补齐机制
在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。例如,下面的结构各成员空间分配情况:struct test转载 2013-05-21 17:57:31 · 695 阅读 · 0 评论 -
scanf与缓存
作为c语言的标准输入函数,scanf在实际的编程中无疑是十分重要的,可是如果使用不当,它也会产生一些莫名其妙的错误的,而这些错误即使你使用断点调试也很难找到错误的根源所在,就像我前不久一篇文章中说到的 “access volition” 错误,scanf的使用不当就是造成这种错误的原因之一,而且由此造成的错误,你是很难发现的。 下面我说一下另外一种大家在C语言编程中可能遇到的问题,转载 2013-05-22 00:53:04 · 914 阅读 · 0 评论 -
Linux c编程一站式学习笔记(08), 几个运算符
这个是>中的总结,有较多摘录, 详细请查看原书246页(一)逗号运算符(CommaOperator)也是一种双目运算符,它的形式是表达式1,表达式2,两个表达式不要求类型一致,左边的表达式1先求值,求完了直接把值丢掉,再求右边表达式2的值作为整个表达式的值。逗号运算符是左结合的,类似于+- * /运算符,根据组合规则可以写出表达式1,表达式2,表达式3,...,表达式n这种原创 2014-01-03 05:48:05 · 628 阅读 · 0 评论