передача параметра структуры по ссылке c ++ - PullRequest
1 голос
/ 23 ноября 2011

как я могу передать параметр структуры по ссылке c ++, см. Ниже код.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>

using namespace std;
struct TEST
{
  char arr[20];
  int var;
};

void foo(char * arr){
 arr = "baby"; /* here need to set the test.char = "baby" */
}

int main () {
TEST test;
/* here need to pass specific struct parameters, not the entire struct */
foo(test.arr);
cout << test.arr <<endl;
}

Желаемый результат должен быть ребенком.

Ответы [ 4 ]

5 голосов
/ 23 ноября 2011

Я бы использовал std :: string вместо c-массивов в c ++ Таким образом, код будет выглядеть так:

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>

using namespace std;
struct TEST
{
  std::string arr;
  int var;
};

void foo(std::string&  str){
  str = "baby"; /* here need to set the test.char = "baby" */
}

int main () {
  TEST test;
  /* here need to pass specific struct parameters, not the entire struct */
  foo(test.arr);
  cout << test.arr <<endl;
}
1 голос
/ 23 ноября 2011

Это не сработает для вас из-за вышеприведенных причин, но вы можете передать это как ссылку, добавив & справа от типа.Даже если мы исправим его по крайней мере, мы должны ответить на вопрос.И это не будет работать для вас, потому что массивы неявно преобразуются в указатели, но они являются r-значением и не могут быть преобразованы в ссылки.

1 голос
/ 23 ноября 2011

Похоже, вы используете C-струны. В C ++ вы, вероятно, должны изучить использование std::string. В любом случае этому примеру передается массив char. Таким образом, чтобы установить ребенка, вам нужно будет делать это по одному символу за раз (не забудьте \0 в конце для C-струн) или посмотрите на strncpy().

Так что вместо arr = "baby" попробуйте strncpy(arr, "baby", strlen("baby"))

1 голос
/ 23 ноября 2011

Это не так, как вы хотите назначить на обр. Это буфер символов, поэтому вы должны скопировать в него символы:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>

using namespace std;
struct TEST
{
  char arr[20];
  int var;
};

void foo(char * arr){
  strncpy(arr, "Goodbye,", 8);
}

int main ()
{
  TEST test;
  strcpy(test.arr, "Hello,   world");
  cout << "before: " << test.arr << endl;
  foo(test.arr);
  cout << "after: " << test.arr << endl;
}

http://codepad.org/2Sswt55g

...