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

Задание размера массива после его объявления во время выполнения программы

24.01.2016, 18:28. Показов 740. Ответов 5

Ребята, подскажите, как задать размер массиву во время выполнения.
Я напишу пример на java - нужно по аналогии сделать на Си

Java
1
2
3
4
5
6
7
class C {
    int[] a;
    ...
    void someMethod(int size) {
        a = a[size];
    }
}
Идея в том, чтобы другие функции могли ссылаться на глобально объявленный массив и получать его размер с помощью sizeof(), одновременно нужно указать размер массива с помощью scanf().

С помощью такого кода:

C
1
2
3
4
5
int* a;
void someMethod(int size) {
    int tmp[size];
    a = tmp;
}
естественно, не получается, потому что a хранит указатель на первый элемент массива, а не на сам массив, поэтому sizeof(a) вернет 4, а не 4 * size.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2016, 18:28
Ответы с готовыми решениями:

Куда деваются данные из массива во время выполнения программы?
Во время выполнения проги куда-то деваются данные из массива из стуктур. Почему так происходит? 1....

Как изменятся элементы массива после выполнения фрагмента программы?
В программе описан одномерный целочисленный массив A с индексами от 1 до 7. Ниже представлен...

Сколько элементов массива будут равны 0 после выполнения фрагмента программы?
Все элементы двумерного массива А(4Х4) первоначально были равны 0.Затем значения элементов меняются...

Определить, сколько элементов массива будут равны 9 после выполнения программы
29) Значения элементов двухмерного массива A сначала равны 0. Затем выполняется следующий фрагмент...

5
542 / 485 / 104
Регистрация: 05.05.2014
Сообщений: 1,110
24.01.2016, 18:31 2
C
1
2
3
4
5
6
int *a, size;
main()
{ 
   scanf(%d", &size);
   a = (int *)malloc(size*sizeof(int));
...
0
20 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 45
24.01.2016, 18:39  [ТС] 3
Я пробовал так - так sizeof() возвращает значение 4.
0
542 / 485 / 104
Регистрация: 05.05.2014
Сообщений: 1,110
24.01.2016, 18:59 4
Цитата Сообщение от jacek Посмотреть сообщение
Я пробовал так - так sizeof() возвращает значение 4.
Не надо никакого sizeof(a). Это возвращает размер указателя. Просто пользуйся значением size.

Добавлено через 1 минуту
Он (как и a) объявлен вне функции, поэтому является глобальным и всем доступным
0
20 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 45
24.01.2016, 20:09  [ТС] 5
Кажется, дает о себе знать программирования на языках высокого уровня.
Массив в высокоуровневых языках (например, java) - это оболочка, содержащая 1) кусок памяти; 2) переменную, содержащую кол-во элементов в этом куске.
Массив же в Си - это сам кусок памяти.

Верны ли мои рассуждения?
0
542 / 485 / 104
Регистрация: 05.05.2014
Сообщений: 1,110
24.01.2016, 20:35 6
Цитата Сообщение от jacek Посмотреть сообщение
Массив же в Си - это сам кусок памяти.
Совершенно точно. Java просто прячет от вас некоторые простые вещи. И в этом, видимо, ее "высота"
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2016, 20:35

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

Определить, сколько элементов массива А будут равны 1 после выполнения программы
Элементы двухмерного массива А размером 4x4 первоначально были равны 0. Затем они изменяются с...

Определить, сколько элементов массива будет <0 после выполнения фрагмента программы
For n:=1 to x+1 do For k:=1 to n do Begin A:=A-1; ...

Определить, чему будут равны элементы массива после выполнения программы
1) В программе описан одномерный целочисленный массив с индексами от 0 до 10 и целочисленные...

Определить, сколько элементов массива С будут равны 1 после выполнения программы
Дан фрагмент программы: for n:=1 tо 5 do for m:=1 tо 5 do C := (m – n)*(m – n); Сколько...


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

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

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