当前位置: 首页 > 工具软件 > plus > 使用案例 >

C++ plus

邵骏喆
2023-12-01

函数参数和数组、字符串

函数参数的三种传递方式

  • 按值传递
  • 地址传递
  • 引用传递

按值传递

将数值参数传递给函数,函数将其赋值给一个新的变量。

double volume = cube(side);//函数调用,side=5.
double cube(double x)//函数原型
  1. 函数调用时创建一个x的double类型变量,初试化为5
  2. cube函数中的操作不会影响side的值;

地址传递

在函数声明时将形参定义为指针,此时的实参必须是地址值,这时的函数参数传递就是地址传递。
在地址传递中,形参指针和实参指针都指向同一个地址,因此在函数中形参地址所指的内容都会被改变。但是在函数中反复利用指针间接访问,会使得程序不够简洁。

引用传递

在函数定义时,在形参前加&就形成了引用传递,利用引用传递实现在函数中修改实参的数据,同时也避免程序易出现问题。

void swap(&int, &int)

函数和数组

int sum_arr(int arr[], int n)
const int ArSize = 4;
int main()
{
    ...
    int cookies[ArSize] = {1, 2, 3, 4};
    int sum = sum_arr(cookies, ArSize);
    ...
 }
 int sum_arr(int arr[], int n){
    ...
 }

函数如何使用指针处理数组

  1. C++将数组名解释为其第一个元素的地址:
    cookies == &cookies[0]
  2. int sum = sum_arr(cookies, ArSize);
    cookies是其第一个元素的地址,因此函数传递的是地址,而数组的元素类型为int,则cookies的类型必须是int指针,即 int*。则正确的函数头应该是这样的:
    int sum_arr(int * arr, int n) // arr = array name
    其中用int * arr 替换了 int arr [ ]。因为在C++中,当用于函数头或者函数原型中,两者相同,而在其他的上下文中两者的含义不同。
  3. 将数组用于参数,并没有将数组的内容传递给函数,而是将数组的位置、元素种类提交给函数,避免了复制所需要的时间和内存。可以通过增加const限定符来避免破坏原始数据。

函数和字符串

  • 函数和C-风格字符串
  • 函数和string对象

函数和C-风格字符串

C-风格字符串由一系列字符组成,以空值字符结尾。

将C-风格字符串作为参数的函数

  • 表示字符串的三种方式
    • char数组
    • 用引号括起的字符串常量
    • 被设置为字符串的地址的char指针

三种选择的类型都是 char * 。实际传递的是字符串第一个字符的地址。

char ghost[15] = "gallo"; //ghost is &ghost [0]
char * str = "galum";

返回C-风格字符串的函数

函数无法返回一个字符串,但可以返回字符串的地址。

char * buildstr(char c, int n); //该函数返回一个指针

函数和string对象

string 对象与结构更相似,可以将一个对象赋值给另一个对象。如果需要多个字符串,可以声明一个string对象数组。

传递结构的地址,形参声明为指向结构的指针,由于形参是指针而不是结构,因此应间接成员运算符(->),而不是成员运算符(句点)

函数和结构

可以按值传递结构,这时函数将使用原始结构的副本,另外函数也可以返回结构。也可以地址传递,结构名只是结构的名称,要获得结构的地址,必须使用地址运算符&。

 类似资料: