第8章函数十个问题

来源:互联网 发布:平板电脑网络转换器 编辑:程序博客网 时间:2024/06/16 09:01

1. 函数调用中,地址传递为什么说形参与实参占用同样的存储单元?

  因为实参传的是那段地址,形参接受的也是这段地址,相同的地址,当然就是相同的存储单元,存储单元就是地址的意思

 

2. 如果C++程序要调用已编译后的C函数,该怎么办?

   假如一个C函数的声明如下

  void foo(int x,int y);

该函数被C编译器编译后再库中的名字为_foo,C++编译器则会产生像_foo_int_int之类的名字来支持重载和类型安全连接,由于编译后的名字不同,C++程序不能直接调用C函数。C++提供了一个C连接交换指定符号externC来解决这个问题

 

3. main()的返回值返回到那里?

   返回给操作系统,表示程序正常退出。因为return语句通常写在程序的最后,不管返回什么值,只要到达这一步,说明程序已经运行完毕。而return的作用不仅在于返回一个值,还在于结束函数

 

4. 为什么有的编译器不支持void main()?

   有些编译器允许这种形式,但是还没有任何标准考虑接受它。标准的C语言要求main函数的返回值是int,该值是执行程序时,告知主调进程程序运行结果的一个渠道。由于大多数时候,程序运行结果可以由其它方式确定,比如程序打印信息,所以main的返回值变得不重要,于是大部分编译器都支持无返回值类型的main,这时默认返回给主调进程0

 

5. 二维数组如何作为函数参数使用?

   二维数组作形参有三种形式:

     void func(int mat[][4]);传递一个二维数组,其中第二维的大小不能省略;

     void func(int(*p)[4]);这里定义一个指针p,这个指针p指向的是一个数组,这个数组的长度是4,也可以这么理解,p指向的是二维数组中的每一行

      void func(int **p);定义一个指针的指针,使用这种形式要注意一些问题,就是在计算每行元素的首地址时,以及具体某个元素位置的地址时候,需要进行强制类型转换才行

 

6. 怎样让函数返回数组?

   C++中函数是不能直接返回一个数组的,但是数组就是指针,所以可以让函数返回指针来实现。不能直接返回函数中定义的数组,会被释放掉。

 

7. 回调函数有哪些具体应用?

   使用回调函数实际上就是在调用某个函数时,将自己的一个函数(这个函数为回调函数)

的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数。

 

8. 有哪些变参函数?

   典型的可变参数函数的例子有printf(),scanf()

 

9. 变参函数如何取参数?

C语言支持可变参数函数,即参数的个数可以是不定个,在函数定义的时候用(...)表示,比如我们常用的printf()等;printf函数的原型如下:

int printf(const char *format,...);

注意,采用这种形式定义的可变参数函数,至少需要一个普通的形参,比如上面代码中的*format,后面的省略号是函数原型的一部分。

 

10. 函数声明放在主函数外和主函数内有什么区别?

   放在主函数外,从它的位置往下,所有的函数都能调用该函数;

   而在主函数内,只有主函数能访问该函数

 

 

 

 

   

 

 

原创粉丝点击