реклама на сайте
подробности

 
 
12 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Как в си объявить массив с возможностью изменения его размера?
011119xx
сообщение Jul 8 2011, 08:29
Сообщение #16


Местный
***

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



Не ожидал господа от вас таких ответов. Извините, если чем то разозлил. Но последний код, который я привел, работает. Можете хоть головой об стенку биться
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 8 2011, 08:30
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Может автор ветки откроет великую тайну, зачем ему понадобились массивы переменной длины? Так, для нашего понимания.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2011, 08:43
Сообщение #18


Гуру
******

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



QUOTE (GetSmart @ Jul 8 2011, 11:14) *
Если у форума одна из задач - интерактивное обучение

Задачи обучения ставят, как в младшей ясельной группе детского сада, так и в Аспирантуре. Весь вопрос в том, как позиционировать этот форум, как ясельную группу, или хотя-бы как начальную школу?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 8 2011, 08:45
Сообщение #19


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(011119xx @ Jul 8 2011, 14:06) *
Это работает. Но это вариант с явным указанием размера буфера при объявлении. Я так понял иначе и нельзя.


Есть ещё вариант. Стандарт 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);
}

Массив (обычно) создаётся на стеке. То есть, если вам ваш массив переменной длины нужен временно, то это отличный вариант.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
011119xx
сообщение Jul 8 2011, 08:49
Сообщение #20


Местный
***

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



Например в шрифте символы имеют разную ширину при одинаковой высоте. При перемножении ширины на высоту получаем массив, причем его размер меняется в зависимости от ширины символа.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 8 2011, 08:53
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(011119xx @ Jul 8 2011, 11:49) *
Например в шрифте символы имеют разную ширину при одинаковой высоте. При перемножении ширины на высоту получаем массив, причем его размер меняется в зависимости от ширины символа.


Вы собираетесь шрифт динамически генерить из, например, true type, или собираетесь использовать готовый? В готовом уже все в массивах лежит.

Пример не катит.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2011, 08:55
Сообщение #22


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(011119xx @ Jul 8 2011, 13:49) *
Например в шрифте символы имеют разную ширину при одинаковой высоте. При перемножении ширины на высоту получаем массив, причем его размер меняется в зависимости от ширины символа.

Для работы понадобится указатель на один элемент массива (первый) и один или несколько переменных-описалово данных внутри массива.
С указателем, как я уже подкорректировал внутри CODE можно работать как с массивом.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2011, 08:55
Сообщение #23


Гуру
******

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



QUOTE (011119xx @ Jul 8 2011, 11:29) *
Можете хоть головой об стенку биться

Биться головой о стенку, причем дооолго и безрезультатно предстоит Вам, ибо при таком подходе к делу (думать не будем, учиться понимать язык не будем, будем сразу "программировать") это неизбежно sad.gif.
Утверждать, Вы можете, что угодно, но приведенная мною Ваша строчка
CODE
uint16_t Buffer[50];
uint16_t *ptr_buffer;
.....
ptr_buffer = &Buffer;

не имеет право даже быть откомпилированной.
Ибо бред. И тут уж либо так
ptr_buffer = &Buffer[0];
либо так:
ptr_buffer = Buffer;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 8 2011, 09:00
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(GetSmart @ Jul 8 2011, 11:55) *
Для работы понадобится указатель на один элемент массива (первый) и один или несколько переменных-описалово данных внутри массива.
С указателем, как я уже подкорректировал внутри CODE можно работать как с массивом.


Вы, надеюсь, понимаете, что ваш подход, кроме изврата, ничего не содержит? Если в вашей функции виден сам массив, на кой лишний указатель и ненужная переменная, в качестве индекса?
Go to the top of the page
 
+Quote Post
011119xx
сообщение Jul 8 2011, 09:00
Сообщение #25


Местный
***

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



Это
Код
ptr_buffer = &Buffer;

как раз и заносит в указатель адрес нулевого элемента массива.
Код
ptr_buffer = &Buffer;

и
Код
ptr_buffer = &Buffer[0];

одно и тоже biggrin.gif
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2011, 09:05
Сообщение #26


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ Jul 8 2011, 13:55) *
...
Ибо бред.

А почему сразу бред? А проверить?

А почему не УЖАС, УЖАС, УЖАС!!! ??? sm.gif

Сообщение отредактировал GetSmart - Jul 8 2011, 09:07


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2011, 09:08
Сообщение #27


Гуру
******

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



QUOTE (011119xx @ Jul 8 2011, 12:00) *
Это
CODE
ptr_buffer = &Buffer;

как раз и заносит в указатель адрес нулевого элемента массива.
CODE
ptr_buffer = &Buffer;

Разумеется нет. "это" бессмысленное выражение которое любой вменяемый компилятор обязан послать нафиг.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
011119xx
сообщение Jul 8 2011, 09:09
Сообщение #28


Местный
***

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



Цитата(sergeeff @ Jul 8 2011, 15:00) *
Вы, надеюсь, понимаете, что ваш подход, кроме изврата, ничего не содержит? Если в вашей функции виден сам массив, на кой лишний указатель и ненужная переменная, в качестве индекса?

Дело в том что когда я читаю ширину и высоту символа мне нужно создать массив размером = ширина*высота и в этот массив скопировать некую картинку такого размера. Это скажем так: фон для символа. Потом в этот массив копируется сам символ, но при этом затирает только очертания символа. Потом из этого массива данные выводятся в дисплей

Цитата(zltigo @ Jul 8 2011, 15:08) *
Разумеется нет. "это" бессмысленное выражение которое любой вменяемый компилятор обязан послать нафиг.

Да ну вас! Ни один компилятор никогда не посылал.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 8 2011, 09:11
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(011119xx @ Jul 8 2011, 12:00) *
Это
Код
ptr_buffer = &Buffer;

как раз и заносит в указатель адрес нулевого элемента массива.
Код
ptr_buffer = &Buffer;

и
Код
ptr_buffer = &Buffer[0];

одно и тоже biggrin.gif


Хоть меня частенько критикуют за любовь к печатным изданиям, но вам, любезный, книги надобно почитать.
Если объявлен массив abc[10], то

abc - это указатель на массив и его значение в точности равно адресу первого элемента, т.е. &abc[0]. А &abc - дает адрес указателя на массив, что, согласитесь, совсем не то, что вы хотите получить и использовать.

на что вам и указал уважаемый zltigo.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 8 2011, 09:11
Сообщение #30


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(011119xx @ Jul 8 2011, 15:08) *
Дело в том что когда я читаю ширину и высоту символа мне нужно создать массив размером = ширина*высота и в этот массив скопировать некую картинку такого размера.
...
Потом из этого массива данные выводятся в дисплей


Вы случайно в пылу полемики не пропустили мой пост (№19)? sm.gif По идее как раз подходит.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

12 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01491 секунд с 7
ELECTRONIX ©2004-2016