C++ | 函数-程序模块

函数返回值

C++函数的返回类型不能是数组(除此之外其他类型均可以),需要注意的是虽然不能直接返回数据类型,但是可以返回含有数组成员的结构体或对象。

函数调用

调用程序依据函数原型,确定需要获取的数据类型,在子程序中,依据函数头获取返回的数据类型。

函数原型

函数原型描述了函数到编译器的接口。且在C++中函数是必不可少的。

函数参数

C++标准使用参数(argument)表示实参,利用参量(parameter)表示形参。函数的参数传递可以称为将参数赋值给参量。

函数和数组

int sum_arr(int arr[], int n);
  • 上述例子中,方括号指出 arr 是一个数组,方括号为空则表示可以将任意长度的数据传递给该函数。
  • 在C++中当且仅当用于函数头或函数原型中时,int *arr 和 int arr[] 的含义才是相同的。均意味着 arr 是一个 int 指针。
  • 传递常规变量时,函数使用变量的副本;传递数组时,函数使用原始数组(数组传递的是地址)。
  • 函数参数在函数中不发生变化时,应使用 const 修饰,以避免不必要的修改。·

const 和指针

将 const 用于指针的方法:

  • 让指针指向一个常量对象,可以防止使用该指针修改所指向的值;
  • 将指针本身声明为常量,防止改变指针指向的位置。区别指针常量和常量指针(强调点在后面)。
int age = 30;
const int *pt = &age;
// 声明指出pt指向一个const int,因此不能通过pt修改这个值。换言之,*pt的值为const。
  • C++禁止将const的地址赋给非const指针。
  • 若数据类型本身并不是指针,则可以将const数据或非const数据的地址赋值给指向const的指针,但只能将非const数据的地址赋给非const指针。

引用和指针

  • 指针是一个对象的地址;引用是一个对象的别名。
  • 指针在运行时可以改变指向的值;而引用一旦和某个对象绑定后就无法再修改。(指针可以重新赋值以指向另一个不同的对象;但引用总是指向初始化时被指定的对象,后续无法再修改,但是指定的对象内容可以修改)
  • 内存分配:指针变量需要分配内存空间;引用不需要分配内存空间。
  • 编译方面:程序在编译时分别将指针和引用添加到符号表,符号变记录的是变量名和变量所对应的地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表对应的地址为引用对象的地址值。符号表生成后就不再改变,因此指针可以改变指向的对象(指着变量中的值可以改变),但引用对象不能改。这也是指针不安全的主要原因,也可以说引用被认为是不能改变的指针。
  • 不存在执行空值的引用这个事实,意味着使用引用的效率要比指针高。(是用引用不需要测试合法性;相比较指针需要时刻测试,防止为空)
  • 理论上,指针可以是多级,但是引用只有一级。

猜你喜欢

转载自blog.csdn.net/qq_38844835/article/details/121642084