字符串按值传递

问题描述 投票:0回答:2

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++ string function turbo-c++
2个回答
5
投票

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

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

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

void pass(std::string g)

并用strlen(g)取代g.length()


0
投票

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

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

您不能按值传递字符数组。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.