2014-02-01 2 views
0

Я такую ​​функцию (в файле file_name.c):Функция, которая возвращает многомерный массив

char function_name(multi_array[][10]) 
{ 
    /*change some character of multi_array*/ 

    return multi_array; 
} 

Это занимает multi_array, многомерный массив символов, изменяет некоторые символы данного параметра, и чем возврат multi_array модифицировано. В main.c, я вызвать функцию так:

multi_array_in_main = function_name(multi_array_in_main); 

Но компилятор дает мне ошибку «icompatible type char[10][10] from type char»

Что я должен делать? Я не очень уверен в C, поэтому я не знаю ..!

ответ

1

Вам ничего не нужно возвращать.

Изменение:

char function_name(multi_array[][10]) 

To:

void function_name(multi_array[][10]) 

И ваш код должен работать нормально (function_name обновит любой массив, то он получает в качестве аргумента, при условии, что размеры являются правильными).

+0

Спасибо, теперь он работает! –

+0

Добро пожаловать :) –

0

Измените функцию для возврата void и удалите инструкцию return. Массив фактически передается как указатель на его первый элемент, поэтому любые изменения, внесенные в него внутри вашей функции, фактически изменяют исходный объект в вызывающем.

void function_name(multi_array[][10]) 
{ 
    /*change some character of multi_array*/ 
} 
0

В заголовке функции вы объявляете функцию для возврата типа "char", но вы возвращаете переменную char [] [10], которая отличается от той, что указана в первой строке вашего кода.

Решение зависит от того, что вы действительно хотите сделать. Если вы хотите вернуть этот многоадресный режим, измените объявление функции. Также вы определили параметр как массив массивов, но он должен быть «массивом массива символов». Короче говоря, ваша декларация линия должна, вероятно, выглядеть следующим образом:

char[][] function_name(char multi_array[][10]) 

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

void function_name(char multi_array[][10]) 
0

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

Также, если вы настаиваете, теоретически, можно определить функцию, возвращающую указатель на массив, который является самым близким к вашему исходному сообщению. Объявление будет:

char (*function_name(char multi_array[][10]))[10] { 
    ... 
    return(multi_array); 
} 

Это так некрасиво, что вы, вероятно, предпочитают, чтобы определить новый для него тип:

typedef char (*multi_array_t)[10]; 

multi_array_t function_name(multi_array_t multi_array) { 
    ... 
} 
Смежные вопросы