使用字符指针将字符串传递给函数

时间:2015-03-30 14:50:27

标签: c++ string function

嘿,伙计们请看一下这段代码。

class person
{
 char name[20];
 float age;

 public:
 person(char *s,float a)
  {
   strcpy(name,s);
   age=a;
  }
};

int main()
{
person P1("John",37.50);
person p2("Ahmed",29.0);
}

因此,在此类中,参数化构造函数将字符指针作为参数,然后将其传递给strcpy函数,该函数将字符串复制到字符数组名称。 如果有一个整数数组,比如int arr [10]; 然后arr是指向第一个元素的指针。 如果有一个字符串数组,就像是一个字符串 char str [] ="你好&#34 ;; 那么str是指向第一个元素的指针,在这种情况下是h。所以我们不应该把str之类的东西传递给构造函数吗?为什么我们传递字符数组元素,比如" john", "艾哈迈德"到构造函数。 我们不应该这样做 - char str [] =" ahmed&#34 ;; person p1 =(str,23);

3 个答案:

答案 0 :(得分:2)

将类似"John""Ahmed"的字符串文字传递给函数/方法意味着您将指针传递给它的第一个字符。

答案 1 :(得分:0)

从编译器的角度来看,

char str[];
char *str;

都被解释为char的指针。

给定函数原型person(char *s,float a)和函数调用person("John",37.50)(在你的情况下它是一个被调用的构造函数,但同样适用),编译器实际生成的是:

char *s = "John";
float a = 37.50;
person(s,a);

更准确地说,上面的示例代码和函数调用person("John",37.50)应生成相同的指令。

答案 2 :(得分:0)

在这种情况下,没有真正的理由使用原始字符串。由于您声明了class,因此您显然也不需要兼容C编程语言。因此,只需使用::std::string,您的代码将更具可读性,并且在某些情况下由于移动语义更快(自动使用::std::string类型)。

#include <string>

class person
{
  ::std::string name;
  float age;

public:
  person(::std::string name, float age)
  : name(name)
  , age(age)
  {
  }
};