2017-02-15 2 views
0

Не удается выполнить следующий код.Невозможно напечатать массив в C++

#include <iostream> 

using namespace std; 

void neuron(double inputs[]) 
{ 
    for (int i = 0; i < sizeof(inputs); i++) { 
     cout<<inputs[i]; 
    } 
} 

int main() 
{ 
    double inputs[] = {10,12,12}; 
    neuron(inputs); 
    return 0; 
} 

Я хочу, чтобы передать массив в функцию neuron, а затем распечатать элементы. Я не могу этого сделать. Код дает мне значения мусора. Что не так с этим кодом?

+7

'sizeof' не делать то, что вы думаете, что он делает. –

+0

вы можете изменить i algojava

+2

Вы не можете передать массив по значению в C++. Он будет распадаться на указатель. – gurka

ответ

4
#include <iostream> 

using namespace std; 

template<size_t size> 
void neuron(double (&inputs)[size]) 
{ 
    for (size_t i = 0; i < size; i++) { 
     cout<<inputs[i]<<endl; 
    } 
} 

int main() 
{ 
    double inputs[] = {10,12,12}; 
    neuron(inputs); 

    return 0; 
} 

example

+0

Может не понадобиться

+0

о, да. Забыл удалить – user5821508

0

Если вы пройдете inputs до neuron, тогда neuron увидит только начальный адрес массива, он не увидит длину массива. Вы должны передать длину в качестве дополнительного параметра. Также не то, что sizeof дает размер массива в байтах, а не в количестве элементов.

void neuron(double inputs[], size_t len) 
{ 
    for (int i = 0; i < len; i++) { 
     cout<<inputs[i]; 
    } 
} 

int main() 
{ 
    double inputs[] = {10,12,12}; 
    neuron(Inputs, sizeof inputs/sizeof inputs[0]); 
    return 0; 
} 

Как ваш вопрос помечен C++ лучше следует использовать типы STL C++ как std::vector (для массивов динамического размера) или std::array (для массивов фиксированного размера).

0

Просто попробуйте следующий код

#include <iostream> 
using namespace std; 


void neuron(double inputs[],int length) 
{ 

    for (int i = 0; i <length; i++) { 
     cout<<inputs[i]; 
    } 
} 

int main() 
{ 
    double inputs[] = {10,12,12,22,22}; 
    neuron(inputs, (sizeof(inputs)/sizeof(*inputs))); 
    return 0; 
} 

В SizeOf() возвращает размер примитивного типа, а не размер массива.

+0

'sizeof (input)' равно 'sizeof (double) * 3' в 'main', но' sizeof (double *) 'в' neuron'. Массивы распадаются на указатели, когда вы передаете их функции. –

+0

Это работает только в этом конкретном случае, когда массив имеет 3 элемента. 'sizeof (input) - 1 всегда выводит 3 (или 7 или что-то еще, в зависимости от архитектуры), независимо от длины массива. Он не имеет ничего общего с длиной массива, он возвращает размер типа указателя минус один байт, который, как правило, является длиной массива 3 в этом конкретном случае. – leemes

+0

ОК. Получил это, можете ли вы снизить ваш ответ? –

0

Вы передаете указатель первого элемента в аранжировке, поэтому размер будет иметь размер double.
Это как бы я к нему:

#include <iostream> 

using namespace std; 

void neuron(double inputs[], int size) 
{ 
    for (int i = 0; i < size; i++) { 
     cout<<inputs[i]; 
    } 
} 

int main() 
{ 
    double inputs[] = {10,12,12}; 
    neuron(inputs, sizeof(inputs)/sizeof(double)); 
    return 0; 
} 
Смежные вопросы