The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Передача в main массива строк ???"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Передача в main массива строк ???"
Сообщение от Руслан Искать по авторуВ закладки on 12-Ноя-03, 15:43  (MSK)
Не могу получить из функции ссылку на двумерный массив. Память требуется выделять динамически в вызываемой функции. Потом этот массив надо обрабатывать в функции 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");
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Передача в main массива строк ???"
Сообщение от vnp emailИскать по авторуВ закладки on 12-Ноя-03, 21:02  (MSK)
>Не могу получить из функции ссылку на двумерный массив. Память требуется выделять
>динамически в вызываемой функции. Потом этот массив надо обрабатывать в функции
>main().

Параметры *всегда* передаются по значению. f(x) не может изменить значение x, какого бы типа этот x ни был. Нужено либо передавать ссылку, либо, что намного грамотнее, возвращать из функции результат:

a = a_values();
...
char ** a_values() {
   char ** c = calloc...
   ...
   return c;
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Передача в main массива строк ???"
Сообщение от Руслан Искать по авторуВ закладки on 13-Ноя-03, 10:52  (MSK)
>>Не могу получить из функции ссылку на двумерный массив. Память требуется выделять
>>динамически в вызываемой функции. Потом этот массив надо обрабатывать в функции
>>main().
>
>Параметры *всегда* передаются по значению. f(x) не может изменить значение x, какого
>бы типа этот x ни был. Нужено либо передавать ссылку, либо,
>что намного грамотнее, возвращать из функции результат:
>
>a = a_values();
>...
>char ** a_values() {
>   char ** c = calloc...
>   ...
>   return c;
>}

Я и пытаюсь передать ссылку, но т.к. массив двумерный это оказалось не так просто как с одномерным .... А насчет возвращаемого значения - а если надо вернуть несколько значений (ссылок на массивы)?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Передача в main массива строк ???"
Сообщение от vnp emailИскать по авторуВ закладки on 13-Ноя-03, 21:53  (MSK)
>>>Не могу получить из функции ссылку на двумерный массив. Память требуется выделять
>>>динамически в вызываемой функции. Потом этот массив надо обрабатывать в функции
>>>main().
>>
>>Параметры *всегда* передаются по значению. f(x) не может изменить значение x, какого
>>бы типа этот x ни был. Нужено либо передавать ссылку, либо,
>>что намного грамотнее, возвращать из функции результат:
>>
>>a = a_values();
>>...
>>char ** a_values() {
>>   char ** c = calloc...
>>   ...
>>   return c;
>>}
>
>Я и пытаюсь передать ссылку, но т.к. массив двумерный это оказалось не
>так просто как с одномерным ....

Чтобы передать ссылку, надо как минимум передавать ссылку...
a_values(&c) (см. соседнее письмо)

>А насчет возвращаемого значения -
>а если надо вернуть несколько значений (ссылок на массивы)?

Сейчас мы можем сорваться во флейм о стилях. Я искренне  убежден, что необходимость возврата нескольких значений олицетворяет неудачное планирование программы. Если же приспичит, см. выше... или обертывайте в структуру...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Передача в main массива строк ???"
Сообщение от xhook Искать по авторуВ закладки on 13-Ноя-03, 13:07  (MSK)
Можно сделать так, но это имхо изврат :)

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;
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру