字符串 按值传递

String Pass by value

本文关键字:按值传递 字符串      更新时间:2023-10-16

Turbo C++:我想在不更改原始数据的情况下将字符串传递给函数(按值传递)。如何在这段代码中实现???

#include<iostream.h>
#include<conio.h>
#include<string.h>
void pass(char g[20])
{
 g[0]=g[2];
 cout<<"nPassed: ";
 for(int i=0;i<strlen(g);i++)
 cout<<g[i];
}
void main()
{
 clrscr();
 char a[20];
 cout<<"nEnter the Data: ";
 cin.get(a,sizeof a);
 int len=strlen(a);
 pass(a);
 cout<<"nAfter pass: ";
 for(int i=0;i<len;i++)
 cout<<a[i];
 getch();
}

C 中的字符串是将 '' 作为最后一个元素的字符数组(使用一些语法糖来定义此类数组)。C 中的数组不是一等公民;特别是,它们不能作为参数传递。将数组传递到函数中时,该函数将收到指向数组第一个元素的指针。指向内存的不被复制,只有指针被复制。因此,在修改指向内存时,调用函数中的内存会被修改。

C++从C继承了这些特征。如果要使用所述的 C 字符串,则必须在将它们传递到函数之前或在函数本身内手动复制它们。

但是,C++ 中的首选方法是使用C++标准库中的std::string。在您的情况下,将pass声明为

void pass(std::string g)

并将strlen(g)替换为g.length()

C++传递字符数组时,传递字符数组的基址。

这意味着自动按地址呼叫。这就是为什么对正式论点所做的更改会反映回实际论点的原因。

不能按值传递字符数组。

但是,你也可以通过值传递字符串的每个字符,并将每个字符存储在该函数的另一个变量中。

或者,您可以在函数中创建一个临时变量来存储原始字符串,然后使用临时字符串进行更改。

你也可以使用 std:string 类代替字符数组。在这种情况下,只需传递变量即可完成工作(按值传递)。