posted @ 2012-06-02 23:20
随笔分类 - C语言百问
这里搜集了个人在学习c语言过程中产生的各种问题
摘要:转载:http://bbs.chinaunix.net/thread-981231-1-1.html大师级经典的著作,要字斟句酌的去读,去理解。以前在看K&R的The C Programming Language(SecondEdition)第1.5节的字符输入/输出,被getchar()和EOF所迷惑了。可能主要还是由于没有搞清楚getchar()的工作原理和EOF的用法。因此,感觉很有必要总结一下,不然,很多琐碎的知识点长时间过后就会淡忘的,只有写下来才是最好的方法。其实,getchar()最典型的程序也就几行代码而已。本人所用的环境是DebianGNU/Linux,在其他系统下也
阅读全文
摘要:代码如下--------------------------------------------------------------intmain(){charch;intcount=0;cin.get(ch);while(cin.fail()==false){cout<<ch;count++;cin.get(ch);}cout<<"\n"<<count<<"charactersread\n";return0;}------------------------------------------------
阅读全文
posted @ 2012-05-11 18:10
摘要:为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈之前看了很多关于uboot的分析,其中就有说要为C语言的运行,准备好堆栈。而自己在Uboot的start.S汇编代码中,关于系统初始化,也看到有堆栈指针初始化这个动作。但是,从来只是看到有人说系统初始化要初始化堆栈,即正确给堆栈指针sp赋值,但是却从来没有看到有人解释,为何要初始化堆栈。所以,接下来的内容,就是经过一定的探究,试图来解释一下,为何要初始化堆栈,即:为何C语言的函数调用要用到堆栈,而汇编却不需要初始化堆栈。要明白这个问题,首先要了解堆栈的作用。关于堆栈的作用,要详细讲解的话,要很长的篇幅,所以此处只是做简略介绍。总的来说,堆
阅读全文
posted @ 2012-04-07 10:42
摘要:C++内联函数(Inline)介绍 介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如#define TABLE_COMP(x) ((x)>0?(x):0) 就定义了一个宏。 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把...
阅读全文
posted @ 2012-03-31 20:04
摘要:在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝赐教,这对于大家学习会有很大帮助。数据结构的栈和堆首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。堆和栈都是一种数据项按序排列的数据结构。栈就像装数据的桶或箱子我们先从
阅读全文
posted @ 2012-03-14 18:26
摘要:为什么用到静态变量?变量存储有两种方式:静态和动态;动态变量在程序执行时分配存储单元,当所在程序段结束时,自动将这些存储单元释放,静态变量存储在永久性的存储单元中,在下次执行该程序段时仍然使用原来的存储单元。因此,静态变量的生存周期将一直延长到其所在的整个程序运行结束。测试代码:#include<stdio.h>void sum();void main(){int a=3;static int b;printf("a=%d,b=%d\n",a,b);sum();sum();}void sum(){int a=2;static int b=10;a+=10;b+=
阅读全文
posted @ 2011-11-14 21:35
摘要:宏与函数的区别:(1)内存堆栈:调用函数时 地址放入堆栈,函数执行完后将调用函数的地址从堆栈返回给程序;而宏展开是使用取代标识直接将宏名取代(2)时间效应:调用函数需要现场保护 和恢复现场,需要较多时间,但不会使目标程序变长;宏展开在编译时运行,不占用运行时间,但会使目标程序变长(3)参数传递:调用有参函数时,先将实参的值复制一份,然后将复制的值传给形参;展开有参宏直接将实参置换形参(4)参数类型:有参函数形参必须指定类型;而有参宏中参数是没有类型的,实参可以是任意类型使用枚举 和使用#define定义常量 和const关键字的区别(从优缺点比较)#Define指令优点:申明一次 多次使用;占
阅读全文
posted @ 2011-11-14 21:34
浙公网安备 33010602011771号