C语言深入学习--checklist6:函数、变量

函数

1.       如何查看函数在内存中的地址?

打印该函数名的值就可以了,函数名是一个const的函数指针;

2.       如何给一个函数指针赋值?

下面这个例子,函数指针的赋值和调用都有了:

 # include <stdio.h>void MyFun(int x);void (*FunP)(int);typedef void (*FunPtr)(int); //定义某一函数指针的类型int main(int argc, char* argv[]){ MyFun(10); FunP = &MyFun; (*FunP)(20); //调用方式1 FunP(30); //调用方式2 FunP = MyFun; (*FunP)(40); //调用方式3 FunP(50); //调用方式4 FunPtr p1; p1 = MyFun; p1(60); (*p1)(70); p1 = &MyFun; p1(80); p1(90); return 0;}void MyFun(int x){ printf("%d/n",x);}

 

3.       你是否会定义可变入参函数?

 

关于可变入参数函数的定义在

http://hi.baidu.com/redfoxzhq/blog/item/93ffca82c2488f94f703a653.html中很详细。

4.       你是否可以区分函数的实参和形参?

5.       如何定义函数名,来表达函数的用途?

6.       你是否使用const来修饰函数入参和返回值,以表达特定的含义?

Const修饰一个函数的参数,表示在此函数过程中,该参数的值不会变化;

Const修饰一个函数的返回值:

(1)       返回值为内部类型,这是没有意义的:它是一个值,不是一个变量,所以编译器不会让它成为一个左值;

(2)       返回值是一个用户定义的类型的时候,这时候表示函数返回的值既不能直接赋值,也不能修改。

7.       递归如何使用?

 

 

 

变量

1.       全局变量,局部变量,常量分别保存在内存中的什么地方?

初始化的全局变量、静态变量保存在数据段,未经初始化的全局变量和未初始化的静态变量保存在BSS段,局部变量保存在栈,常量:字符串常量保存在文本段中;const修饰的全局变量保存在文本段中;const修饰的局部变量保存在堆栈段中。

2.       对于不同类型的变量,你是否知道他们的作用域?

全局变量,作用于全部的程序;局部变量,作用于本层函数;

全部静态变量,作用于本文件(其它文件不可见,就是static的隐藏)

局部静态变量,作用于本层函数,但是在本层函数结束后,生命期一直存在。

3.       全局变量和局部变量是否可以重名?你是否在这样做?

可以重名。能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。没有这样做。

4.       局部变量在函数退出后是否有效,为什么?

局部静态变量退出后有效,因为局部静态变量存储在数据段,生命周期为整个函数;

局部非静态变量在函数退出后无效,因为局部非静态变量存储在堆栈段,函数结束后,会被系统释放。

5.       全局变量为什么不允许定义在头文件中?有何危害?

当多个文件都引用同一个定义了全局变量的头文件时,会出现变量重复定义的情况

 

 

你可能感兴趣的:(C语言深入学习--checklist6:函数、变量)