找工作时总结的一些C/C++知…

来源:互联网 发布:java实现实时监控系统 编辑:程序博客网 时间:2024/06/05 05:37
原文地址:找工作时总结的一些C/C++知识点(1)作者:xianfa110

C语言的四个变量存储类分别是:auto, register, extern,static

1. auto

auto 可以省略不写,是局部变量,作用域限于所在函数或模块。

2. register

register变量作用域和auto变量相同变量保存在寄存器中,只是对编译程序的一种建议,不是强制性的,比如当前CPU中所有寄存器都用光时,就会忽略。

寄存器变量无地址,无法进行求地址运算。寄存器变量应该尽量靠近使用的地方,用完后尽快释放。

3. static

static变量生存期直到程序运行结束,作用域和auto相同,能记住上次的值。

auto在进行编译前一定要有值,static变量则不需要有初值,如果无,则默认值为0

函数默认为extern类型,如果要某函数只能在一个源文件中有效,而不能被其它源文件所用,则可将函数定义为静态的,即函数声明前加static

4. extern

外部变量,是在函数外部任意位置定义的全局变量。

假如一个程序由10个源文件构成,每个源文件都必须访问一个全局变量,在这种情况下,其中9个文件必须把变量声明为extern,另一个则不能(因为须为该变量分配空间)。虽然在饱含main()函数的源文件中分配变量是最合理的,但哪个文件真正分配该变量是无关紧要的。

 

按值传递和按指针传递

      按值传递时,被调函数内部对形参的改变不反映到上层函数的实参中。按引用传递与按指针传递效果一样。

 

指针与数组

当定义了指针类型之后,指针的增加减少是以类型所占的字节数增长的。如:int *p; p=p+1;实际上p是的增加了sizeof(int)个。

对于数组,int A[10]; int *p=A; p=p+1; *p=10; 则是改变了数组的第二个值,地址自动按sizeof(int)增长。

 

堆和堆栈的区别

一个程序将操纵系统分配给其运行的内存快分为4个区域:

代码区:存放程序代码

全局数据区:存放程序的全局数据和静态数据

堆区:存放程序的动态数据

栈区:存放程序的局部数据,即各个函数中的数据。 

函数调用的整个过程就是栈空间操作的过程。调用过程:

(1)   建立栈空间;

(2)   保护返回地址和函数运行状态;

(3)   传递参数;

(4)   将控制交给被调函数;

(5)   恢复调用调用函数运行状态;

(6)   释放栈空间

(7)   根据返回地址,回到调用函数。 

 

进程和线程的概念

进程是一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动。一个程序可对应多个进程。

线程负责执行包含在进程的地址空间中的代码,也即完成代码执行的是线程,而进程只是线程的容器,或者说是线程的执行效率。单个进程可能包含若干个线程。

 

命令行

      操作系统将命令行参数以字符串的形式传递给main()。因此一般形式为:

void main(intargc, char *argv[])  //参数名称可任意取

{

      int i=0;

      while(i<argc)

             {

                    cout<<”arg”<<i<<”:”<<argv[i]<<endl;

                    i++;

             }

}

argc表示参数的个数,acgv表示参数数组,操作系统以空格区分作为下一个参数的标志。

0 0
原创粉丝点击