2012-05-24 2 views
-2

Я пытаюсь манипулировать динамически распределенной матрицей, объявленной как глобальный указатель, используя функции, для простоты я не собираюсь вставлять сюда код, но я дам эквивалент и, возможно, яркий примерМанипулирование структурой в C с использованием функций

structname **variable; 

int main() 
{ 
    variable = readfile("filename"); 
    variable = modify(variable); 
    output(variable); 
} 

Это выглядит довольно просто, а вход и выход работает правильно, то проблема заключается в том, что мой «изменить» функция не делает каких-либо изменений, это пример этого:

structname **modify(structname **p) 
{ 
    swapitems(p[x][y],p[j][z]); 
    modifyitem(p[x][y]); 
    return p; 
} 

с

void swapitems(structname a, structname b) 
{ 
    structname buffer; 

    buffer = b; 
    b = a; 
    a = buffer; 
} 

Я думаю, проблема в том, что я не могу передать элементы swapitems и modifyitem, как это, как я могу изменить элементы с помощью таких функций, как те, в modify?

+2

Не используйте 'void main()'; вы понесете гнев. Это 'int main (void)' или 'int main (int argc, char ** argv)'. –

+0

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

ответ

4

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

void swapitems(structname* a, structname *b){ 

    structname buffer; 

    buffer = *b; 
    *b = *a; 
    *a = buffer; 
} 

Тогда вызов функции должен быть

swapitems(&p[x][y],&p[j][z]); 

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

+0

, или вы можете просто изменить глобальный язык напрямую и забыть обо всех этих глупых материалах OO ... и иметь дело с последствиями очень сложного и сложного управления кодом :) –

+0

спасибо, что именно я искал, я знаю, что я мог бы реализовать вещи лучше, но я должен придерживаться этого – hate

+0

. Если вы не знали, если вы нашли этот ответ полезным, вы можете нажать галочку на [accept] (http://stackoverflow.com/faq#howtoask) Это. – murgatroid99

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