关于C++的一些细节[五:函数-基础]

原创 2005年04月24日 00:47:00

7.函数

7.1 C++默认按值传递函数.

7.2 C++对函数返回值类型有限制,不能是数组,可以是结构和类对象,还有内置基本类型. 不过可以将数组作为结构或类对象组成部分返回.

7.3 通常函数通过将返回值复制到指定的寄存器或内存单元中来将其返回.随后,调用程序将查看内存单元.

7.4 函数原型描述了函数到编译器的接口.  这样做,编译器的效率高. 虽然可以通过扫描函数头来得到相同的信息.

7.5 原型的参数列表中,可以包括变量名,也可以不包括. 其作用相当于占位苻, 因此不必与函数定义中的变量名相同.

7.6 ANSI C 中原型可选函数名后括号为空,意味着: 不指出参数--将在后面定义参数列表.

  C++ 原型比选, 仅当与接受可变参数的C函数 (如: printf()) 交互时才需要不指定参数列表, 使用'...',

  如: void say_hi (...);

C++ 函数名后括号内为空与 使用关键字 void 等效. 意味着函数没有参数.

7.7 通常原型自动将被传递的参数强制转换为期望的类型.

7.8 函数和数组

  int sum_arr ( int arr[], int size );           int sum_arr ( int * arr, int size );

上面2个原型作用都一样.

 **注意: 在函数体内, sizeof(srr) 计算的是指针的大小.所以需要传入数组的个数.

   传入的是数组地址的拷贝,arr指向的是原始数组地址,所以能在函数体内修改数组元素.

7.9 用const保护数组. 如: void show_arr ( const int num[], int size );

  该声明表明指针num指向的是常量数据,不能用sum 修改该数据.

7.10 指针和const.

  ^ int a = 3;

  ^  const int * ps = $a; //*ps是const, ps不是

  ^ int * const pt = &a;  //pt是const, *pt不是

 * 常规变量的地址可以赋值给常规指针.

 * 常规变量的地址可以赋值给指向 const 的指针. 如: 对于ps 而言,a 的值是常量,即ps不能用来修改 a 的值.而a的值可以使用别的方法被修改.

 * 不能将const变量地址 赋值给常规指针.

 * 可以将const 变量地址赋值给 const 指针.

in all: 使用const 使得函数能够处理 const 和非 const 实参, 否则将只能接受非 const 数据.

7.11 const 只能用于指向基本类型(内置类型,数组,结构,类对象)的指针.不能用于指向指针的指针.

7.12 二维数组做参数的 函数原型.

 int data[3][4];

 int sum ( int (*ar2)[4], int size );  //原型, (*ar2)[4] 表示一个指向由4个int 组成的数组的指针.

 *ar2[4]表示一个由4个指向int的指针 组成的数组.

 int sum (int ar2[][4], int size ); //原型的另一种表示.

7.13 函数与结构

 * 结构名仅是结构的名称,要获得其地址需用 '&'

 * 与基本类型一样,可以按值传递结构,也可以传递地址, 还可以传递引用(详细见下篇).

7.14 函数指针.

 * 获取函数地址: 函数名就是 函数地址.

 * 声明函数指针: 用 *pf 替换原函数原型.

  如: int add ( int, int ); //原函数原型.

       int (*pf)( int, int ); //函数指针 原型.

 * 调用: 如: int sum = (*pf)(3,4);

   也可以用 : int sum = pf(3,4);

 ** 函数指针数组:  int (*pf[3])( int, int ); //原型.

7.15 传递参数为字符串

  int ch_in_str ( const char * str, char ch );

  int ch_in_str (const char str[], char ch ); //2个原型等效

字符串常量的行为与数组名相同.

C++基础——一些细节、常犯错误的汇总

本文covers各种为人知、不太为人知的围绕c++的小细节。 1. 什么才代表着无穷小量? 2. numeric_limits.min()与numeric_limits.epsilon()的区别是什么...

C++基础::shared_ptr 编程细节(一)

1. shared_ptr 的两面性(类实例,“指针”) 2. shared_ptr 的一个副作用 3. 以 shared_ptr 类类型为容器类型的容器之间的赋值...

C/C++基础:set的基本操作总结及注意细节问题

set容器中只能存储键,是单纯的键的集合,其中键是不能重复的。 set支持大部分的map的操作,但是set不支持下标的操作,而且没有定义mapped_type类型。 下面简单总结下set容器的...

C++语法基础--类(class)--类型别名,this指针,初始化式,友元的一些注意细节

注:“一些注意细节”是相对于我自己来说的(闲着无事,把入门书关于类的章节看了一遍,发现这些内容以前还真没注意到)。类的简要回顾,在C++语法基础--类已经概况了。 1.使用类型别名来简化类 ...

C++基础::shared_ptr 编程细节(二)

*sp 与 sp.get() 三种初始化的方法 operator ==(shared_ptr对象的相等性比较)

C++程序学习--cin.get()函数读取空行时的细节

在学习《C++ Primer Plus》第六版第17章P780页的程序时遇到一个小问题,这个问题困扰了我很久,直到我找到了一篇博文http://www.cnblogs.com/tonglinglian...

基本语言细节---C++ 虚函数表解析 陈皓

C++ 虚函数表解析   陈皓 http://blog.csdn.net/haoel     前言   C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的...

C++那些细节--函数指针

关于函数指针的一些问题

C++那些细节--拷贝构造函数

关于C++拷贝构造函数

C++拷贝构造函数的几个细节

拷贝构造函数是C++最基础的概念之一,大家自认为对拷贝构造函数了解么?请大家先回答一下三个问题: 1. 以下函数哪个是拷贝构造函数,为什么? X::X(const X&);  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于C++的一些细节[五:函数-基础]
举报原因:
原因补充:

(最多只允许输入30个字)