字符串按值传递

时间:2013-12-29 06:36:07

标签: c++ string function turbo-c++

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();
}

2 个答案:

答案 0 :(得分:5)

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

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

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

就足够了
void pass(std::string g)

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

答案 1 :(得分:0)

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

这意味着自动按地址调用。这就是为什么对正式参数的更改反映回实际参数。

您无法按值传递字符数组。

但另外,您可以按值传递字符串的每个字符,并将每个字符存储在该函数的另一个变量中。

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

您也可以使用std:string类而不是字符数组。在这种情况下,简单地传递变量将完成工作(通过值传递)。

相关问题