关于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/C++中的函数

项目中使用到的C/C++中的一些函数,记录下来加以理解和掌握。 1、memset( )        memset是计算机中C/C++语言函数。将s所指向的某一块内存中的前n个 字节的内容全部设置...
  • qq_25827845
  • qq_25827845
  • 2016年06月15日 10:30
  • 1074

增强图像细节(附C++代码)

最近看到百图经验中有个快速提高图像清晰度的帖子,不适用锐化,而是用滤镜的方式。 具体操作: 1.打开照片并复制一个图层,位于原始图层上方 2.对复制的图层使用滤镜,滤镜-其它-高反差保留 3.复制图层...
  • xiaohuaibao
  • xiaohuaibao
  • 2016年08月18日 10:28
  • 281

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

8.1内联函数 * 通常做法是: 省略原型,将整个定义(函数头+函数体代码)放在本应该提供原型的地方. * 内联函数不能递归.  也不能过大,一般只有1,2行代码. * 与宏比较:     宏是通过文...
  • lao_du
  • lao_du
  • 2005年04月24日 01:57
  • 1674

JAVA经典及细节总结

写代码: 1,明确需求。我要做什么?    分析的时候:从具体到抽象 2,分析思路。我要怎么做?1,2,3。 实现的时候:从抽象到具体 3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。 ...
  • sinat_24196195
  • sinat_24196195
  • 2015年11月12日 21:39
  • 1389

HTTP协议细节

一】客服端  -->  服务端        1》结构            a)请求行            b)请求头            c)请求体:请求的内容,如果没有,就是空白字符    ...
  • u012986057
  • u012986057
  • 2016年01月23日 16:42
  • 330

strcpy函数细节

char * strcpy(char *dest,char *sour);c  = strcpy(a,b)a只能是空间足够大的字符串数据对象,比如说数组。a的空间不够大,将导致越界,不产生异常,但修改...
  • strayer555
  • strayer555
  • 2006年12月10日 15:31
  • 384

图像细节增强

本篇主要讲述图像细节增强的几种方法,根据论文做了总结笔记。主要有:L0平滑,引导滤波,快速双边滤波和边缘保留多尺度图像分解的新方法(基于加权最小二乘法框架)。 图像细节增强的核心是将原图像表示为基本...
  • u010385790
  • u010385790
  • 2017年09月22日 21:49
  • 483

C++基础知识汇总

C++面试题——基础概念篇 唐璐 http://blog.csdn.net/worldwindjp/         面试C++程序员的时候一般都是3板斧,先是基础问答,然后一顿...
  • weiyuefei
  • weiyuefei
  • 2016年08月01日 20:59
  • 1130

关于博弈论基础知识的一些总结

文章PDF文档:链接地址 博弈论是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜目标的理论。 基础的基础 a) 当前执行者想赢。这个是必要的,有时候题目中判别...
  • xf_zhen
  • xf_zhen
  • 2016年07月23日 18:51
  • 489

正则应用之——逆序环视探索

1        问题引出 前几天在CSDN论坛遇到这样一个问题。 我要通过正则分别取出下面 与 之间的字符串 1、在 与 之间的字符串是没法固定的,是随机自动生成的 2、其中...
  • bluexuemei
  • bluexuemei
  • 2014年05月12日 09:23
  • 293
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于C++的一些细节[五:函数-基础]
举报原因:
原因补充:

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