2016-11-13 3 views
0

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

ANLAGE является структурой с некоторыми флоат и Int значений и некоторых гольцов-массивов внутри

typedef struct{ 
    unsigned int InventarNr; 
    char Anlagenbez[15]; 
    char Standort[15]; 
    float Basiswert; /* in EUR */ 
    unsigned int Nutzdauer; /* in Jahren */ 
    unsigned int AnschJahr; 
} ANLAGE; 

anlage_arr инициализируется следующим образом:

ANLAGE *anlage_arr; 
anlage_arr = malloc(sizeof(ANLAGE)); 

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

int erstelle_anlagenliste(ANLAGE *anlage_arr, size_t size) { 


    int i; 

    for(i = 0; i < size; i++){ 
     printf("%-15d%-20s%-20s%.1f%-15d%-15d%\n", 
       anlage_arr[i].InventarNr,anlage_arr[i].Anlagenbez, 
       anlage_arr[i].Standort, anlage_arr[i].Basiswert, 
       anlage_arr[i].Basiswert, anlage_arr[i].AnschJahr); 
    } 
    return 1; 
} 

, а затем я вызываю функцию следующим образом:

erstelle_anlagenliste(&anlage_arr, size); 

Когда я это делаю, я просто получаю некоторые случайные значения, которые, я думаю, являются адресами значений. но может ли кто-нибудь помочь мне, как я могу получить реальные значения элементов в массиве?

благодарим вас заранее!

+2

ОК, и мы должны ответить на этот вопрос, не зная, что такое ANLAGE, или как инициализируется «anlage_arr» до того, как будет вызвана функция «erstelle_anlagenliste» ??? –

+0

также, @barakmanos мы должны делать горизонтальный свиток? Просто спроси. : P –

+1

Пожалуйста, покажите [mcve] – OldProgrammer

ответ

1

В этом вызове

erstelle_anlagenliste(&anlage_arr, size); 

тип первого аргумента ANLAGE **, так как переменная anlage_arr объявляется как

ANLAGE *anlage_arr; 

Однако функция ожидает, что первый аргумент будет иметь тип ANLAGE *

int erstelle_anlagenliste(ANLAGE *anlage_arr, size_t size) { 

Таким образом, вызов функции, как

erstelle_anlagenliste(anlage_arr, size); 
         ^^^^^^^^^^ 

Также примите во внимание, что если вы хотите иметь дело с массивом более чем из одного элемента, то вместо этого заявления

anlage_arr = malloc(sizeof(ANLAGE)); 

написать что-то вроде

anlage_arr = malloc(size * sizeof(ANLAGE)); 
+0

спасибо! :) Это сработало – djafix

+0

@djafix Нет вообще. Добро пожаловать.:) –

Смежные вопросы