2013-03-16 2 views
-4

Я новый программист на C++ и только начал со структур и указателей, и у меня возникли сомнения.Вернуть указатель структуры в функции void

У меня есть структура и функция недействительной()

struct my_struct 
{ 
int x; 
} 

void my_function(){ 

my_struct* x=10 

} 

мне нужно вернуть значение my_struct * х до вызова функции.

большинство примеров я видел возвращение указатель структуры не использует функцию пустот() вместо этого они используют как этого

struct my_struct 
    { 
    int x; 
    } 

    struct my_struct* my_function(int* x){ 

    //assign the value for X and return by assign a reference `&` from caller function 

    } 

так что это не возможно, чтобы вернуть указатель структуры из пустой функции или сделать Мне нужно использовать указатели void? PLS медведь со мной и помочь мне, я новичок в программировании.

+1

Возвращаемый тип функции 'void' означает, что функция не возвращает значение." Если вам нужно что-то вернуть, дайте функции соответствующий тип возвращаемого значения. Это будет 'my_struct *' в вашем случае. – Angew

+1

Кроме того, 'my_struct * x = 10' является незаконным –

+0

Если вы не полностью понимаете функции и указатели, не пытайтесь вернуть указатель, динамически выделенный внутри вызова функции. Вы можете в конечном итоге вызвать утечку памяти, если вы забудете удалить их впоследствии. Если возможно, передайте структуру по ссылке. В противном случае взгляните на интеллектуальные указатели в библиотеках boost. – FKaria

ответ

1

Прежде всего:

void my_function() { 
    my_struct* x=10 
} 

является незаконным. Я не думаю, что вы полностью поняли смысл указателей. Чтобы вернуть значение, которое вы должны:

  • Либо установить возвращаемое значение с my_struct* my_function()
  • или определить, какой вне переменная должна хранить возвращаемое значение: my_struct* my_function(my_struct**);.

Вот некоторые примеры с использованием динамического распределения:

my_struct* my_function() { 
    return new my_struct { 10 }; 
} 

или:

void my_function(my_struct** var) { 
    *var = new my_struct { 10 }; 
} 

Если это имеет смысл, это хорошая практика, чтобы использовать возвращаемое значение, если это возможно. Вы можете использовать второй подход, когда вам нужно несколько возвращаемых значений из одной функции.

+0

@jueecySo, если мне нужно распечатать значение * var, должен ли я печатать в этой функции void() или должен печатать в функции вызывающего абонента. – Rd7

+0

@ Rd7, Если ваша функция должна печатать переменную, в функции. В противном случае в функции вызывающего абонента. – Shoe

0

Чтобы сообщить значения вызывающему абоненту без использования типа возврата, вы можете заполнить буфер, предоставленный вызывающим абонентом. Это часто называют «выходным параметром».

void my_function(my_struct** result) 
{ 
    my_struct* x = new my_struct{ 10 }; 
    //... 
    *result = x; 
}