Не могу получить из функции ссылку на двумерный массив. Память требуется выделять динамически в вызываемой функции. Потом этот массив надо обрабатывать в функции main().main () {
char **a;
int i;a_values(a);
for (i=0;i<2;i++) printf("%s\n", a[i]); // Здесь a[i] нет
}a_values (char **c) {
int i;
c=(char **)calloc(10, sizeof(char *));
for (i=0;i<10;i++) c[i]=(char *)calloc(10, sizeof(char));sprintf(c[0], "first");
sprintf(c[1], "second");
sprintf(c[2], "third");
}
>Не могу получить из функции ссылку на двумерный массив. Память требуется выделять
>динамически в вызываемой функции. Потом этот массив надо обрабатывать в функции
>main().Параметры *всегда* передаются по значению. f(x) не может изменить значение x, какого бы типа этот x ни был. Нужено либо передавать ссылку, либо, что намного грамотнее, возвращать из функции результат:
a = a_values();
...
char ** a_values() {
char ** c = calloc...
...
return c;
}
>>Не могу получить из функции ссылку на двумерный массив. Память требуется выделять
>>динамически в вызываемой функции. Потом этот массив надо обрабатывать в функции
>>main().
>
>Параметры *всегда* передаются по значению. f(x) не может изменить значение x, какого
>бы типа этот x ни был. Нужено либо передавать ссылку, либо,
>что намного грамотнее, возвращать из функции результат:
>
>a = a_values();
>...
>char ** a_values() {
> char ** c = calloc...
> ...
> return c;
>}Я и пытаюсь передать ссылку, но т.к. массив двумерный это оказалось не так просто как с одномерным .... А насчет возвращаемого значения - а если надо вернуть несколько значений (ссылок на массивы)?
>>>Не могу получить из функции ссылку на двумерный массив. Память требуется выделять
>>>динамически в вызываемой функции. Потом этот массив надо обрабатывать в функции
>>>main().
>>
>>Параметры *всегда* передаются по значению. f(x) не может изменить значение x, какого
>>бы типа этот x ни был. Нужено либо передавать ссылку, либо,
>>что намного грамотнее, возвращать из функции результат:
>>
>>a = a_values();
>>...
>>char ** a_values() {
>> char ** c = calloc...
>> ...
>> return c;
>>}
>
>Я и пытаюсь передать ссылку, но т.к. массив двумерный это оказалось не
>так просто как с одномерным ....Чтобы передать ссылку, надо как минимум передавать ссылку...
a_values(&c) (см. соседнее письмо)>А насчет возвращаемого значения -
>а если надо вернуть несколько значений (ссылок на массивы)?Сейчас мы можем сорваться во флейм о стилях. Я искренне убежден, что необходимость возврата нескольких значений олицетворяет неудачное планирование программы. Если же приспичит, см. выше... или обертывайте в структуру...
Можно сделать так, но это имхо изврат :)main () {
char **a;
int i;a_values(&a);
for (i=0;i<2;i++) printf("%s\n", a[i]); // Здесь a[i] нет
}a_values (char ***b) {
int i;
char **c=(char **)calloc(10, sizeof(char *));
for (i=0;i<10;i++) c[i]=(char *)calloc(10, sizeof(char));sprintf(c[0], "first");
sprintf(c[1], "second");
sprintf(c[2], "third");
*b=c;
}