C++学习(八)函数基础
2010-01-19 10:43
417 查看
1.函数是C++的编程模块。要使用函数,必须提供定义和原型,并调用该函数。函数定义是实现函数功能的代码;函数原型描述了函数的借口:传递给函数的值的数目和种类以及函数的返回类型。函数调用使得程序将参数传递给函数,并执行函数代码。
2.函数的值传递,是通过C++的拷贝机制,形参是新变量,形参是实参的拷贝,这种形式保护了原始数据的完整性。
3.C++将数组名参数视为函数首元素的地址。从技术上讲,这仍然是按值传递的,因为指针是原始地址的拷贝,但函数将是偶那个指针来访问原始数组的内容。当且仅当声明函数的形参时,TypeName arr[]和TypeName* arr才是等价的。
4.C++提供了3中便是C-Style字符串的方法:字符数组、字符串常量和字符串指针。它们的类型都是char*(char指针),因此被作为char* 类型参数传递给函数。
5.C++提供string类表示字符串,string对象既可以作为函数参数传入,也可以作为函数返回值返回,使用size()方法可以知道string对象的长度
6.C++处理结构和基本类型一样,按值传递。如果结构比较大,可以用结构指针作为函数参数,这样效率会非常高。
7.理解二维数组作为函数参数进行传递,理解指向指针的指针
二维数组作为参数传递,两种声明方式:
int sum(int (*arr)[4], int size);//arr是指针,不是数组。arr是数组指针,指向包含4个int型元素的数组
int sum(int arr[][4],int size);
上面的声明方式,只需要指定列数,行数作为另一个参数进行传递
ar2[r][c] == *(*(ar2+r) + c)
ar2//指向二维数组第一行的数组指针(一维数组的指针),ar2也是指向指针的指针
ar2+r//指向第r行的数组指针
*(ar2+r)//第r行的一维数组,同时也是第r行一维数组的指针(首元素地址)
*(ar2+r)+c//第r行的一维数组的第c个元素地址
*(*(ar2+r)+c)//ar2[r][c]的值
8.函数指针:函数的地址是存储其机器语言代码内存的开始地址。
获取函数的地址:使用函数名就可以获得函数的地址。
声明函数指针:声明指向函数的指针时,必须声明指定指针指向的函数类型。
double pam(int);
double (*pf)(int);
调用函数时,double y = (*pf)(5)或者double y = pf(5)都可以。
第一种:*pf是函数,采用函数的调用方式。
第二种:函数名就是指向函数的指针,指向函数的指针的行为应与函数名相似。
2.函数的值传递,是通过C++的拷贝机制,形参是新变量,形参是实参的拷贝,这种形式保护了原始数据的完整性。
3.C++将数组名参数视为函数首元素的地址。从技术上讲,这仍然是按值传递的,因为指针是原始地址的拷贝,但函数将是偶那个指针来访问原始数组的内容。当且仅当声明函数的形参时,TypeName arr[]和TypeName* arr才是等价的。
4.C++提供了3中便是C-Style字符串的方法:字符数组、字符串常量和字符串指针。它们的类型都是char*(char指针),因此被作为char* 类型参数传递给函数。
5.C++提供string类表示字符串,string对象既可以作为函数参数传入,也可以作为函数返回值返回,使用size()方法可以知道string对象的长度
6.C++处理结构和基本类型一样,按值传递。如果结构比较大,可以用结构指针作为函数参数,这样效率会非常高。
7.理解二维数组作为函数参数进行传递,理解指向指针的指针
二维数组作为参数传递,两种声明方式:
int sum(int (*arr)[4], int size);//arr是指针,不是数组。arr是数组指针,指向包含4个int型元素的数组
int sum(int arr[][4],int size);
上面的声明方式,只需要指定列数,行数作为另一个参数进行传递
ar2[r][c] == *(*(ar2+r) + c)
ar2//指向二维数组第一行的数组指针(一维数组的指针),ar2也是指向指针的指针
ar2+r//指向第r行的数组指针
*(ar2+r)//第r行的一维数组,同时也是第r行一维数组的指针(首元素地址)
*(ar2+r)+c//第r行的一维数组的第c个元素地址
*(*(ar2+r)+c)//ar2[r][c]的值
8.函数指针:函数的地址是存储其机器语言代码内存的开始地址。
获取函数的地址:使用函数名就可以获得函数的地址。
声明函数指针:声明指向函数的指针时,必须声明指定指针指向的函数类型。
double pam(int);
double (*pf)(int);
调用函数时,double y = (*pf)(5)或者double y = pf(5)都可以。
第一种:*pf是函数,采用函数的调用方式。
第二种:函数名就是指向函数的指针,指向函数的指针的行为应与函数名相似。
相关文章推荐
- C++学习笔记:函数指针语法基础以及函数指针做函数参数的思想剖析
- C++基础学习笔记----第四课(函数的重载、C和C++的相互调用)
- [C++学习历程]基础部分 C++中的函数中的值参数、地址参数、引用参数实际例子
- 【C++基础学习】引用和指针、重载、函数、内存管理
- C++基础学习—函数
- 【C/C++语言基础学习】在主函数的定义的指针数组、二维数组通过三级指针在被调用函数分配内存
- 【C++学习笔记】函数基础和参数传递
- C++基础学习系列--0(前言)、异或运算和sizeof函数
- C++基础学习笔记----第四课(函数的重载、C和C++的相互调用)
- [C++学习历程]基础部分 C++中的函数中的值参数、地址参数、引用参数实际例子
- C++零基础入门学习(函数模版)
- C++学习基础十六-- 函数学习笔记
- [C++学习历程]基础部分 C++中的函数学习
- 【C++基础学习】C++怎样重载一个函数名
- C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)
- 【C++基础学习】关于C++静态成员函数和变量
- C++ 基础学习笔记(2)---函数(测试题)
- [C++学习历程]基础部分 C++中的函数学习
- C++基础学习笔记 - 函数模板
- c++基础学习13-c++的函数模板