|
Как в си объявить массив с возможностью изменения его размера? |
|
|
|
Jul 7 2011, 13:49
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата Как в си объявить массив с возможностью изменения его размера? Никак. ..остальное изврат. Использовать динамическое выделение памяти и указатель.
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Jul 8 2011, 07:27
|

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

|
Цитата(GetSmart @ Jul 7 2011, 13:00)  Поэтому имхо вопрос заключается в создании указателя на пустой массив, потом по ходу проги присваивание указателю адреса (на статик, динамик или прочий буфер) и хранение размера массива во второй целочисленной переменной. В данном случае это должно быть как-то так? Код uint16_t Buffer[]; uint16_t *ptr_buffer; uint16_t index_buffer; uint16_t value;
void main(void) { ptr_buffer = &Buffer; index_buffer = 32; value = ptr_buffer + 32; }
|
|
|
|
|
Jul 8 2011, 08:01
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(011119xx @ Jul 7 2011, 08:36)  Необходимо в Кейле объявить массив без указания его размера. А потом по необходимости использования массива задать размер в зависимости от условий. Можно ли это сделать на си и как? Приведите пример того, что хотите делать с массивом (использование массива). Для начала для массива константного размера. Я покажу как это сделать с массивом переменной длины. Не слушайте zltigo. У него плохое настроение
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 8 2011, 08:05
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(zltigo @ Jul 8 2011, 11:53)  Абсолютный ужас. Полное непонимание не только языка, но и собственно физического смысла творимого  Публичный дом, молодая проститутка выбегает из номера клиента в растрепанных чувствах и с воплями - УЖАС, УЖАС, УЖАС!!!! Мадам успокаивает проститутку и сама идет к клиенту. Через некоторое время выходит, и говорит - Ну да, ну ужас. Ну уж никак не УЖАС, УЖАС, УЖАС!
|
|
|
|
|
Jul 8 2011, 08:06
|

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

|
Не много поправлюсь: Код uint16_t Buffer[50]; uint16_t *ptr_buffer; uint16_t index_buffer; uint16_t value;
void main(void) { ptr_buffer = &Buffer; index_buffer = 32; Buffer[index_buffer] = 0х0010; value = *(ptr_buffer + index_buffer); } Это работает. Но это вариант с явным указанием размера буфера при объявлении. Я так понял иначе и нельзя.
|
|
|
|
|
Jul 8 2011, 08:14
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(jorikdima @ Jul 8 2011, 13:01)  Поддержу, пожалуй. Если у форума одна из задач - интерактивное обучение, естественно в такой форме чтобы у вопрошающего не отбивалось желание вообще заниматься, то это не лучший подход. Старческое брюзжание. Представьте такого человека в роли препода в любом заведении и учиться сразу расхочется. Ветка называется "в помощь начинающему". Расслабьтесь, профи  Цитата(011119xx @ Jul 8 2011, 13:06)  слегка подправил: Код void main(void) { ptr_buffer = &Buffer; index_buffer = 32; ptr_buffer[index_buffer] = 0х0010; value = ptr_buffer[index_buffer]; } Цитата Это работает. Но это вариант с явным указанием размера буфера при объявлении. Я так понял иначе и нельзя. Иначе буферов может быть много и разных. Хоть с заданным размером на этапе компиляции, хоть с неявным, выделенным в динамической памяти (куче). И по ходу проги, одному общему указателю (ptr_buffer) можно присваивать разные адреса (адреса разных буферов). Тогда один общий алгоритм будет фактически "шарить" по разным буферам. Частный случай переменной-указателя - параметр функции.
Сообщение отредактировал GetSmart - Jul 8 2011, 16:21
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 8 2011, 08:27
|

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

|
QUOTE (011119xx @ Jul 8 2011, 11:06)  Не много поправлюсь: Ничего себе немного - каждой строчке были ошибки, поменяли все строчки, кроме одной: CODE ptr_buffer = &Buffer; В этой, естественно осталась полная лажа, посему вот это: QUOTE Это работает. Неправда. При всем этом попытались исправить (но не исправили) только формальные ошибки не позволявшие сие даже скомпилировать.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|