2010-3-29

1】定义与申明

      定义声明最重要的区别:定义创建了对象并为这个对象分配了内存,声明没有分配内存。 int i;定义。 extern int i;声明。

 

      注释先于预处理指令被处理。

2】栈,堆和静态区

      对于程序员,一般来说,可以简单的理解为内存分为三个部分:静态区,栈,堆。

      静态区:保存自动全局变量和static变量(包括static全局和局部变量)。静态区的内容在整个程序的生命周期内都存在,有编译器在编

                  译的时候分配。

      栈:保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间有限。

      堆:由malloc系列函数或new操作符分配的内存。其生命周期有free或delete决定。在没有释放之前一直存在,直到程序结束。其特

            点是使用灵活,空间比较大,但容易出错。

3】今天使用gets时的小问题!!!

            char sz[20];

            gets(sz);

            while(sz[0]!='/0')

            {

                    gets(sz);

            }

             看上面这个程序段,第一次运行gets输入字符串“aa”,第二次居然直接跳出了while循环,也就是说while只执行了一次,查了

             下man了gets函数,看到了如下一句:

             gets() reads a line from stdin into the buffer pointed to by s until either a terminating newline or eof,which

             it replaces with '/0'. No check for buffer overrun is performed(see BUGS below).

             原来在当我按下回车的时候,第二个gets便将'/0'当成了它的输入。

             如在第二个gets前加一个scanf('/n')吃掉按下的回车便可解决问题。。。

4】结构体字对齐问题!!!

发布了18 篇原创文章 · 获赞 4 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章