Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Gudsaf
104 / 15 / 3
Регистрация: 29.11.2010
Сообщений: 335
1

Работать в главной функции с массивом, который лежит во второстепенной функции - реально?

28.10.2012, 02:17. Просмотров 678. Ответов 3
Метки нет (Все метки)

Знаю что когда мы вызываем функцию, то после завершения её работы, автоматически всё что делалось в функции стирается (все локальные для этой функции переменные).

Вопрос такой:
если я во второстепенной функции динамически создам массив, смогу ли я получить к нему доступ из главной функции?

Вопрос два:
как в функции делать динамический массив, который сохраняться будет не в функции а как глобальный массив (то есть за функцией)

п.с. массивы создаются через realloc
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2012, 02:17
Ответы с готовыми решениями:

Как работать с двумерным массивом в функции?
Помогите пожалуйста, я столкнулся с проблемой ввода и вывода массива с помощью функции. Компилятор...

Вызов функции с массивом указателей на функции
Как вызвать такую функцию в maine? void Grafik(void (*funks)(int), int numberFunks, int x_size)...

В главной функции main () ввести входные данные, и вызвав собственные функции, вычислить значение выражения и вывести результаты
В главной функции main () ввести входные данные, и вызвав собственные функции, вычислить значение...

Цикл прохода по главной и второстепенной диагонали
Добрый вечер. Голова уже не работает, а надо сегодня сдать программку. Может кто может написать...

3
Croessmah
++Ͻ
16219 / 9310 / 1783
Регистрация: 27.09.2012
Сообщений: 22,979
Записей в блоге: 2
Завершенные тесты: 2
28.10.2012, 02:30 2
Цитата Сообщение от Gudsaf Посмотреть сообщение
если я во второстепенной функции динамически создам массив, смогу ли я получить к нему доступ из главной функции?
Да, но только если есть указатель на эту область памяти.

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


P.S. Не забудьте только освободить память после того, как она станет не нужна
1
Gudsaf
104 / 15 / 3
Регистрация: 29.11.2010
Сообщений: 335
28.10.2012, 03:14  [ТС] 3
Цитата Сообщение от Croessmah Посмотреть сообщение
Да, но только если есть указатель на эту область памяти.
Круто, чё сказать - люблю СИ))
тогда будем отправлять строку в функцию и там прям на месте клепать массив, а после обратимся к первому элементу массива в главной функции и там понесётся!

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

1) считать первую строку первый столбец, проверить, потом если всё нормально (а если не нормально пропустить второй шаг)
2) считать первую строку второй столбец и дальше.....
3) считать следующую строку первый столбец и по кругу до конца


Тот же вновь созданный динамический массив будет разбросан где попало (точнее его строки будут разбросаны)

Добавлено через 7 минут
ладно считать, их потом же ещё нужно будет эти ячейки складывать/делить/умножать, после перезаписывать и в итоге выводить на ответ - и это всё не в основе функции это же страшно так....
0
Croessmah
++Ͻ
16219 / 9310 / 1783
Регистрация: 27.09.2012
Сообщений: 22,979
Записей в блоге: 2
Завершенные тесты: 2
28.10.2012, 03:48 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
 
int ** CreateIntMatrix(int n, int m){
    if (n<1 && m<1) return 0;
    int ** pMatrix=(int**)calloc(n,sizeof(int*));
    for(int i=0;i<n;++i)
        pMatrix[i]=(int*)calloc(m,sizeof(int));
    return pMatrix;
}
 
int main(){
    int **pA;
    int x=3, y=7,i,j;
    pA=CreateIntMatrix(x,y);
    if (pA){
        for(i=0;i<y;++i)
            for(j=0;j<x;++j)
                pA[j][i]=i*x+j;
        for(i=0;i<y;++i){
            for(j=0;j<x;++j)
                printf("A[%d][%d]=%d\t",i,j,pA[j][i]);
            printf("\n");
        }
    }
    
    
    for(i=0;i<x;++i)
        free(pA[i]);
    free(pA);
    getch();
    return 0;
}
Здесь функция CreateIntMatrix создает двумерный массив типа int и возвращает указатель на выделенную память. Далее если вернулся не 0, заполняется массив, выводится на экран и удаляется. Примерно так это выглядит.

Добавлено через 10 минут
Цитата Сообщение от Gudsaf Посмотреть сообщение
Тот же вновь созданный динамический массив будет разбросан где попало (точнее его строки будут разбросаны)
Если хотите, то можете выделить один большой массив для всех значений, потом выделить массив для хранения указателей на каждый "столбец" и работать с линейным массивом как с двухмерным. Можно еще просто пользоваться адресной арифметикой.
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 03:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Найти сумму элементов главной и второстепенной диагонали матрицы
1. Дан массив A(N, N), состоящий из случайных чисел от 1 до 9. Вывести сам массив, а также...

Нахождения суммы элементов главной и второстепенной диагонали заданной матрицы
Помогите разобраться как здесь и к чему... Задача: сделать программу для нахождения суммы...

Определить индекс максимального елемента расположеннго на главной и второстепенной диагоналях.
для заданной матрицы A(n). Определить индекс максимального елемента расположеннго на главной и...

как назначить разный дизайн для главной и второстепенной страниц
Начинаю разбираться с друпалом, не могу понять, как сделать, чтобы главная страница была оформлена...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.