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

 
 
12 страниц V  « < 3 4 5 6 7 > »   
Reply to this topicStart new topic
> Как в си объявить массив с возможностью изменения его размера?
AHTOXA
сообщение Jul 8 2011, 10:55
Сообщение #61


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

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



Цитата(sergeeff @ Jul 8 2011, 16:47) *
Ну ну. Сегодня шрифт такой, завтра шеф (заказчик) запросит другой. Ну хоть проверку на размерность массива вставьте!
Вы о чём? Речь идёт о задании размера во время компиляции/линковки. Если не хватит памяти под новый шрифт, то линкер обругается, вот и проверка.


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


.
******

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



Цитата(zltigo @ Jul 8 2011, 15:48) *
Это не работает. Как там было у Задорнова - "Пива нет. СОВСЕМ нет!"

Преобразования типов нет. СОВСЕМ НЕТ! © zltigo
С сегодняшнего дня типизированные указатели не могут присваиваться к другим типизированным указателям. Аминь.

Upd.
zltigo, Вы верите, что void *p можно присвоить адрес любого типа? Даже так p = &mass. Это что, незаконно? СОВСЕМ?
Вобщем если пива нет, но очень хочется, то пиво есть sm.gif

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


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


Местный
***

Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821



Цитата(sergeeff @ Jul 8 2011, 12:55) *
Вы это к чему? Там же ниже прямо написано

Звиняюсь, & операцию у ТС не увидел :-(
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 8 2011, 11:04
Сообщение #64


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

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



Цитата(AHTOXA @ Jul 8 2011, 13:55) *
Вы о чём? Речь идёт о задании размера во время компиляции/линковки. Если не хватит памяти под новый шрифт, то линкер обругается, вот и проверка.


Уважаемый. Вы понимаете про что говорите? Статический массив автору был нужен для копирования тела символа. Где гарантия, что в другом шрифте, символы "влезут" в этот массив? Кто мешает использвать шрифт, с меньшим количеством используемых символов (т.е. сам шрифт может быть компактнее), но при этом сами символы крупнее. И что вам тут линкер скажет? Странное это программирование, основанное на предположениях и утверждениях "и так катит".
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 8 2011, 11:28
Сообщение #65


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

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



Цитата(sergeeff @ Jul 8 2011, 17:04) *
Уважаемый. Вы понимаете про что говорите? Статический массив автору был нужен для копирования тела символа. Где гарантия, что в другом шрифте, символы "влезут" в этот массив?

А вы попробуйте для интереса иногда читать то, на что возражаете. Выделяем массив размера как максимальный символ. И всё. Размер этот известен на этапе компиляции.
Цитата(sergeeff @ Jul 8 2011, 17:04) *
Странное это программирование, основанное на предположениях и утверждениях "и так катит".
Это вы уже сами что-то себе выдумали, и доблестно с этим воюете. Грубите, кстати.


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


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

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



Цитата(AHTOXA @ Jul 8 2011, 14:28) *
А вы попробуйте для интереса иногда читать то, на что возражаете. Выделяем массив размера как максимальный символ. И всё. Размер этот известен на этапе компиляции.Это вы уже сами что-то себе выдумали, и доблестно с этим воюете. Грубите, кстати.


Это вы придумали такой вариант реализации системы, где шрифты подключаются на этапе сборки проекта. Откуда мне и вам знать, может они на SD карточке лежат?

А в чем грубость то? Объясните старику. Да, и не плохо бы примерчик, где линкер ругается на размер массива, в который вы собираетесь что то копировать.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jul 8 2011, 12:01
Сообщение #67


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(sergeeff @ Jul 8 2011, 13:11) *
Хоть меня частенько критикуют за любовь к печатным изданиям, но вам, любезный, книги надобно почитать.
Если объявлен массив abc[10], то

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


Вам бы самому хоть немного почитать. abc -- это указатель-константа которая равна адресу первого элемента массива с нулевым индексом, у константы не может быть адреса.
Go to the top of the page
 
+Quote Post
skripach
сообщение Jul 8 2011, 12:22
Сообщение #68


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



sasamy, поддержу.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 8 2011, 12:35
Сообщение #69


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

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



Цитата(sergeeff @ Jul 8 2011, 17:47) *
Это вы придумали такой вариант реализации системы, где шрифты подключаются на этапе сборки проекта. Откуда мне и вам знать, может они на SD карточке лежат?

Наконец-то вы поняли, о чём я писал. А если шрифты лежат на карточке, то да, надо будет проверять размер. Но сама идея от этого не изменится.

Цитата(sergeeff @ Jul 8 2011, 17:47) *
А в чем грубость то? Объясните старику.

Фу-ты ну-ты. Я что, должен вас пожалеть? Давайте, раз вы старик, вы будете читать мои сообщения два раза, прежде чем отвечать на них, хорошо? И свои перед отправкой - тоже читайте. Потому что иначе получаются наезды не по существу.

Цитата(sergeeff @ Jul 8 2011, 17:47) *
Да, и не плохо бы примерчик, где линкер ругается на размер массива, в который вы собираетесь,что то копировать.

Код
int array[100500];

(предвидя придирки - на mega8)


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


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



http://chitay.org/c/04/0409.htm
upd. и еще оттуда
http://chitay.org/c/11/1105.htm

http://www.keil.com/support/man/docs/armcc...ef_bcfgjjhf.htm
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2011, 13:31
Сообщение #71


Гуру
******

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



QUOTE (GetSmart @ Jul 8 2011, 13:56) *
zltigo, Вы верите, что void *p можно присвоить адрес любого типа? Даже так p = &mass. Это что, незаконно? СОВСЕМ?
Вобщем если пива нет, но очень хочется, то пиво есть sm.gif

Хватит пытаться вертеться, о присвоении указателя на void. Речь не шла. Когда Вы пытаясь, как Вам кажется, "изящно" выкрутиться ПОДМЕНИЛИ в исходном тексте указатель на short указателем на void, я Вам сразу указал на это, Вы начали передергивать подсовывая другой заведомо глотаемый сишным компилятором вариант.
QUOTE
Вобщем если пива нет, но очень хочется, то пиво есть

Да, тогда такие, как Вы насцав а бокал делаете вид что лично Вы пьете пиво sad.gif. Все. Точка, шулер Вы наш sad.gif.


QUOTE (ViKo @ Jul 8 2011, 16:12) *

Со стеком или любым другим ДИНАМИЧЕСКИМ выделением памяти проблем, совершенно нет по определению. Единственно, что выделять фиг знает какой объем памяти в стеке явно не кошерно, посему остается естественное и контролируемое на ошибки динамическое выделение памяти из heap. Другое дело, что все идет к тому, что для данного случая просто все надо делать на лету, а не бездумно трясти пальму.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2011, 13:42
Сообщение #72


.
******

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



Ничё не сделал, только вошёл sm.gif И сразу мошенник.

Себя почитайте
Цитата(zltigo @ Jul 8 2011, 14:08) *
Цитата
как раз и заносит в указатель адрес нулевого элемента массива.
Код
ptr_buffer = &Buffer;

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

Вы заявили, что амперсанд применительно к массиву без индекса является бессмысленной операцией. Я же подправил, что она осмысленная, но малость не соответствует по типу указателя. Нельзя же так относиться к мелким ошибкам ТС - бред, бред! УЖАС, УЖАС, УЖАС!

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


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


Гуру
******

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



QUOTE (GetSmart @ Jul 8 2011, 16:42) *
Себя почитайте

Не, для Вас, поскольку Вы даже не шулер, который таки-боится получить в реале канделябром по голове, а просто моральный урод sad.gif. Я себя почитаю:
CODE
uint16_t Buffer[50];
uint16_t *ptr_buffer;
.....
ptr_buffer = &Buffer;

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

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


QUOTE (zltigo)
"это" бессмысленное выражение которое любой вменяемый компилятор обязан послать нафиг.
....
Что проверить? Что указатель на int не является кирпичом?


После этого GetSmart таки сам проверил и получив, как и было обещано отлуп о компилятора
Начал жульничать, заменив как ни всем ни бывало uint_16 *ptr_buffer на void *

QUOTE (GetSmart)
CODE
u16 abc[10];
void *p;

main()
{
p = &abc;
...
}


Однако, компиляторописатели (хвала аллаху, что zltigo не из них) думают, что логична.


На что ему было сразу указано:

QUOTE (zltigo)
Замените КАК ЭТО СДЕЛАНО В ПЕРВОИСТОЧНИКЕ:
u16 *p
И компилятор ответит, что он думает "Чему равен p"


То, что думают компиляторы было продемонстрировано:
QUOTE
компиляторрописатели IAR:
Error[Pe513]: a value of type "u16 (*)[10]" cannot be assigned to an entity of type "u16 *"

а это для разгообразия PowerCraft:
(139): operands of = have illegal types `pointer to u16' and `pointer to array 10 of u16t'

Реагируют посылкой в анус того, кто так пишет.


Дальше GertSmat, ведет себя совершенно ожидаемо и традиционно, как известной русской присказке про божью росу.
Надоело.

QUOTE
Нельзя же так относиться к мелким ошибкам ТС - бред, бред! УЖАС, УЖАС, УЖАС!

Приходится напоминать, что слова о бреде относились к исходнику ТС. Вот он полностью:
CODE
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;
}

Могу только повторить, что кроме void main(void){ }
Все остальное или бред:
uint16_t Buffer[];
ptr_buffer = &Buffer;
value = ptr_buffer + 32;

либо, как uint16_t index_buffer; просто неразумность для ARM.
Это еще не касаясь осмысленности производимых действий sad.gif и
index_buffer = 32;

Если это "мелкие ошибки", то что тогда крупные sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2011, 14:46
Сообщение #74


.
******

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



Цитата(zltigo @ Jul 8 2011, 19:28) *
Если это "мелкие ошибки", то что тогда крупные sad.gif.

Я уже писал - отсутствие NAK в протоколе I2C.

Вы как истеричка sm.gif
Вся соль в посте №72. Он почти неурезанный. И на этом я закончу.


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


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(sasamy @ Jul 8 2011, 15:01) *
abc -- это указатель-константа которая равна адресу первого элемента массива с нулевым индексом, у константы не может быть адреса.
"Ой".

Утверждение "&abc это адрес указателя" неправильно, но и Вы что-то странное написали.
С «у константы не может быть адреса» можно согласиться, если определиться, что под словом «константа» имеется ввиду литерал.
const int ci = 5; // тоже ведь константа

abc -- это идентификатор массива, который в выражениях в большинстве случаев автоматически приводится к указателю на его первый элемент, т.е. к величине (включая как тип, так и значение), тождественной &abc[0].
Но не во всех.

sizeof(abc) даст размер массива в байтах, тогда как sizeof(&abc[0]) даст длину указателя.

&abc даст адрес массива, что и было продемонстрировано в приведенной выдаче компилятора.
(«кстати о птичках»™, в С нет многомерных массивов, есть одномерные массивы, включая массивы других одномерных массивов).
Численно он равен адресу первого элемента, но по типу отличается. Указатель на первый элемент даёт обращение к одному элменту, указатель на массив даёт обращение к массиву.
sizeof(* &abc) также даст размер массива в байтах.

Переменная ptr_abc_0, имеющая тот же тип, что и &abc[0], при инкременте будет увеличиваться на размер (с учётом выравнивания) элемента массива.

Переменная ptr_abc, имеющая тот же тип, что и &abc, будет увеличиваться на длину массива.


Цитата(GetSmart @ Jul 8 2011, 17:46) *
Вы как истеричка sm.gif
Вся соль в посте №72. Он почти неурезанный. И на этом я закончу.
Хм... А нужную-то цитату Вы и в своём сообщении привели.
Цитата(GetSmart @ Jul 8 2011, 16:42) *
Себя почитайте

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

Речь-то идёт не о применении & к имени массива, а о выражении, присвавающем результат переменной другого типа.

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

Это
Код
double d;
float *pf = &d;
тоже «всего лишь слегка не совпадает по типу», не так ли? Но любой вменяемый компилятор тоже обязан послать нафиг.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 09:24
Рейтинг@Mail.ru


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