|
|
  |
Как в си объявить массив с возможностью изменения его размера? |
|
|
|
Jul 8 2011, 09:11
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (GetSmart @ Jul 8 2011, 12:05)  А почему сразу бред? А проверить? Что проверить? Что указатель на int не является кирпичом? QUOTE А почему не УЖАС, УЖАС, УЖАС!!! ???  Потому,что я это уже сказал ранее.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 8 2011, 09:18
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(011119xx @ Jul 8 2011, 14:09)  Дело в том что когда я читаю ширину и высоту символа мне нужно создать массив размером = ширина*высота и в этот массив скопировать некую картинку такого размера. Это скажем так: фон для символа. Потом в этот массив копируется сам символ, но при этом затирает только очертания символа. Потом из этого массива данные выводятся в дисплей Так создайте сразу статичный массив с размером под максимально большой символ, который потребуется. При работе с малыми символами конец массива использоваться не будет. Велика беда. Иначе можно выделять место в стеке, как предлагал AHTOXA. Цитата(zltigo @ Jul 8 2011, 14:11)  Потому,что я это уже сказал ранее. Так это были Вы?
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 8 2011, 09:20
|

Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544

|
Цитата(AHTOXA @ Jul 8 2011, 15:11)  Вы случайно в пылу полемики не пропустили мой пост ( №19)?  По идее как раз подходит. Не пропустил. Спасибо. Хороший вариант. Буду пробовать
|
|
|
|
|
Jul 8 2011, 09:44
|

Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544

|
Цитата(AHTOXA @ Jul 8 2011, 14:45)  Есть ещё вариант. Стандарт C99 поддерживает автоматические переменные-массивы переменной длины: Код int mean_of_N_samples(int N) { int arr[N]; for (int i = 0; i < N; i++) { arr[i] = get_sample(); } return mean(arr, N); } Массив (обычно) создаётся на стеке. То есть, если вам ваш массив переменной длины нужен временно, то это отличный вариант. В данном случае массив объявляется внутри функции. Мне нужно чтобы массив был глобальным, он потом используется в другой функции.
|
|
|
|
|
Jul 8 2011, 09:45
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(sergeeff @ Jul 8 2011, 14:37)  Что вы подразумеваете под несуществующим указателем на массив? Код u16 abc[10]; void *p;
main() { p = &abc; ... } Чему равен p? Цитата А &abc - дает адрес указателя на массив Что такое адрес указателя на массив?
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 8 2011, 09:49
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(GetSmart @ Jul 8 2011, 13:42)  В стеке нужно будет иметь гарантированно нужный объём памяти при самом наихудшем случае. А вдруг не хватит? В статике же один раз выделил и не напрягаешься. По этому поводу есть рассуждения в умных книжках. Мы давайте "заср...м" глобальным массивом дефицитную память процессора, а пользоваться им будем где-то в процедуре. А кто мешает в этой самой функции объявлять такой же массив (если стека хватает)? Хотя я писал уже, что в данной задаче и массив то этот не нужен вовсе. А по поводу &abc можете почитать у отцов основателей http://www.realcoding.net/article/view/1094Цитата Что такое адрес указателя на массив? Указатель лежит в памяти. Адрес указателя - это адрес этой памяти.
|
|
|
|
|
Jul 8 2011, 09:55
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(sergeeff @ Jul 8 2011, 14:49)  А по поводу &abc можете почитать у отцов основателей http://www.realcoding.net/article/view/1094Не читал, но осуждаю  Но на элементарный вопрос не ответить - надо уметь. Цитата(sergeeff @ Jul 8 2011, 14:49)  Хотя я писал уже, что в данной задаче и массив то этот не нужен вовсе. В названии топика есть вопрос. На него и отвечаем. Остальное вторично. Тем более, кто сказал, что память дефицитная. Если подобный массив в стеке будет только в одном месте выделяться, то статичный вариант лучше во всех отношениях. Точнее, если такая квазидинамическая память больше в программе не используется.
Сообщение отредактировал GetSmart - Jul 8 2011, 09:56
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 8 2011, 10:08
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата А по поводу &abc можете почитать у отцов основателей http://www.realcoding.net/article/view/1094От туда: Цитата Операция & применима только к переменным и элементам массива, abc есть константа. Не?  UPD: Т.е. запись &abc просто нелогична, ну как получить адрес адреса.
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|