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

 
 
> Как в си объявить массив с возможностью изменения его размера?
011119xx
сообщение Jul 7 2011, 03:36
Сообщение #1


Местный
***

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



Необходимо в Кейле объявить массив без указания его размера. А потом по необходимости использования массива задать размер в зависимости от условий. Можно ли это сделать на си и как?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
011119xx
сообщение Jul 8 2011, 09:00
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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
sergeeff
сообщение Jul 8 2011, 09:11
Сообщение #3


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

Группа: Свой
Сообщений: 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
GetSmart
сообщение Jul 8 2011, 09:30
Сообщение #4


.
******

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



Цитата(sergeeff @ Jul 8 2011, 14:11) *
А &abc - дает адрес указателя на массив, что, согласитесь, совсем не то, что вы хотите получить и использовать.

на что вам и указал уважаемый zltigo.

Право, какая глупость. Это что за адрес несуществующего "указателя" на массив?


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


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

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



Цитата(GetSmart @ Jul 8 2011, 13:30) *
Право, какая глупость. Это что за адрес несуществующего "указателя" на массив?


Что вы подразумеваете под несуществующим указателем на массив?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2011, 09:45
Сообщение #6


.
******

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



Цитата(sergeeff @ Jul 8 2011, 14:37) *
Что вы подразумеваете под несуществующим указателем на массив?

Код
u16 abc[10];
void *p;

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

Чему равен p?
Цитата
А &abc - дает адрес указателя на массив

Что такое адрес указателя на массив?


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


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

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(GetSmart @ Jul 8 2011, 13:45) *
Чему равен p?
Вообще-то в случае обявленного массива array[n] указатель &array, скорее всего будет равен указателю array. Скорее всего - потому что зависит от реализации компилятора. Но пользоваться этим очень плохо, так как в случае динамичесого массива, созданного через calloc/malloc это точно будет не так.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2011, 10:15
Сообщение #8


.
******

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



Цитата(vvs157 @ Jul 8 2011, 15:02) *
.. в случае динамичесого массива, созданного через calloc/malloc это точно будет не так.

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

Цитата(skripach @ Jul 8 2011, 15:08) *
UPD:
Т.е. запись &abc просто нелогична, ну как получить адрес адреса.

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

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


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


Гуру
******

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



QUOTE (GetSmart @ Jul 8 2011, 13:15) *
Однако, компиляторописатели (хвала аллаху, что zltigo не из них) думают, что логична. Т.к. результат - всегда адрес. И глаз программера этот амперсанд так же примечает.

Хвала Аллаху, что у компиляторописателей голова растет не из ануса, посему на это:
CODE
u16 abc[10];
u16 *p;

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

компиляторрописатели 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'

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

QUOTE (GetSmart @ Jul 8 2011, 13:28) *
Адресу массива, не сомневайтесь.

Разуваем глаза и смотрим на вышенаписанное.
QUOTE
Но согласитесь, на УЖАС, УЖАС, УЖАС это не тянет. Так, мелкое хулиганство sm.gif

Не соглашусь, однако.


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


.
******

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



Цитата(zltigo @ Jul 8 2011, 15:34) *
Хвала Аллаху, что у компиляторописателей голова растет не из ануса, посему на это:
...
Реагируют посылкой в анус того, кто так пишет.

Но всё-таки она вертится!?
Ведь результат &mass является адресом массива, хоть и с другими атрибутами, чем первый его элемент. Чтобы не париться, его всегда можно присвоить нетипизированному указателю. И это работает не только с массивами, но и с записами, юнионами, функциями и возможно ещё что упустил.
Очень интересная новость после стольких лет...

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


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


Гуру
******

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



QUOTE (GetSmart @ Jul 8 2011, 13:41) *
Но всё-таки она вертится!?
Ведь результат &mass является адресом массива, хоть и с другими атрибутами, чем первый его элемент.

Что значит "вертится" и "является адресом", если компиляторы ВЫВАЛИВАЕТСЯ с ошибкой и соответственно НЕ генерят никакого кода?
Кто здесь пытается вертеться, как уж на сковородке, видно невооруженным взглядом sad.gif.
QUOTE
И это работает не только...

Это не работает. Как там было у Задорнова - "Пива нет. СОВСЕМ нет!" - СОВСЕМ не раболтает. О чем я сразу и написал увидя этo:
CODE
uint16_t Buffer[50];
uint16_t *ptr_buffer;
.....
ptr_buffer = &Buffer;

Именно ЭТО увидел и именно об ЭТОМ а не чем-то другом написал.


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


.
******

Группа: Участник
Сообщений: 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
zltigo
сообщение Jul 8 2011, 13:31
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- 011119xx   Как в си объявить массив с возможностью изменения его размера?   Jul 7 2011, 03:36
- - V_G   За Кейл не скажу, а в Винде делал указатель на ука...   Jul 7 2011, 04:17
- - ukpyr   без выделения памяти - никак, объявите массив макс...   Jul 7 2011, 04:44
|- - vvs157   Цитата(ukpyr @ Jul 7 2011, 08:44) без выд...   Jul 8 2011, 09:47
- - XVR   В C99 можно задать размер массива в момент его опи...   Jul 7 2011, 05:55
- - GetSmart   Цитата(011119xx @ Jul 7 2011, 08:36) А по...   Jul 7 2011, 07:00
|- - 011119xx   Цитата(GetSmart @ Jul 7 2011, 13:00) Поэт...   Jul 8 2011, 07:27
|- - zltigo   QUOTE (011119xx @ Jul 8 2011, 10:27) В да...   Jul 8 2011, 07:53
|- - jorikdima   Цитата(zltigo @ Jul 8 2011, 11:53) Абсолю...   Jul 8 2011, 08:01
||- - GetSmart   Цитата(jorikdima @ Jul 8 2011, 13:01) Под...   Jul 8 2011, 08:14
||- - zltigo   QUOTE (GetSmart @ Jul 8 2011, 11:14) Если...   Jul 8 2011, 08:43
|- - XVR   Цитата(zltigo @ Jul 8 2011, 11:53) Абсолю...   Jul 8 2011, 08:05
- - 011119xx   Не могли бы привести код в качестве примера?   Jul 7 2011, 08:27
- - skripach   ЦитатаКак в си объявить массив с возможностью изме...   Jul 7 2011, 13:49
- - GetSmart   Цитата(011119xx @ Jul 7 2011, 08:36) Необ...   Jul 8 2011, 08:01
- - 011119xx   Не много поправлюсь: Кодuint16_t Buffer[50...   Jul 8 2011, 08:06
|- - zltigo   QUOTE (011119xx @ Jul 8 2011, 11:06) Не м...   Jul 8 2011, 08:27
|- - AHTOXA   Цитата(011119xx @ Jul 8 2011, 14:06) Это ...   Jul 8 2011, 08:45
|- - 011119xx   Цитата(AHTOXA @ Jul 8 2011, 14:45) Есть е...   Jul 8 2011, 09:44
|- - AHTOXA   Цитата(011119xx @ Jul 8 2011, 15:44) В да...   Jul 8 2011, 10:41
|- - sergeeff   Цитата(AHTOXA @ Jul 8 2011, 14:41) Если н...   Jul 8 2011, 10:47
|- - AHTOXA   Цитата(sergeeff @ Jul 8 2011, 16:47) Ну н...   Jul 8 2011, 10:55
|- - sergeeff   Цитата(AHTOXA @ Jul 8 2011, 13:55) Вы о ч...   Jul 8 2011, 11:04
|- - AHTOXA   Цитата(sergeeff @ Jul 8 2011, 17:04) Уваж...   Jul 8 2011, 11:28
|- - sergeeff   Цитата(AHTOXA @ Jul 8 2011, 14:28) А вы п...   Jul 8 2011, 11:47
|- - AHTOXA   Цитата(sergeeff @ Jul 8 2011, 17:47) Это ...   Jul 8 2011, 12:35
|- - sergeeff   Цитата(AHTOXA @ Jul 8 2011, 16:35) Кодint...   Jul 8 2011, 16:02
|- - AHTOXA   Цитата(sergeeff @ Jul 8 2011, 22:02) P.S....   Jul 8 2011, 17:31
- - 011119xx   Не ожидал господа от вас таких ответов. Извините, ...   Jul 8 2011, 08:29
|- - zltigo   QUOTE (011119xx @ Jul 8 2011, 11:29) Може...   Jul 8 2011, 08:55
|- - GetSmart   Цитата(zltigo @ Jul 8 2011, 13:55) ... Иб...   Jul 8 2011, 09:05
|- - zltigo   QUOTE (GetSmart @ Jul 8 2011, 12:05) А по...   Jul 8 2011, 09:11
|- - ar__systems   Цитата(zltigo @ Jul 8 2011, 05:11) Что пр...   Jul 8 2011, 18:02
- - sergeeff   Может автор ветки откроет великую тайну, зачем ему...   Jul 8 2011, 08:30
- - 011119xx   Например в шрифте символы имеют разную ширину при ...   Jul 8 2011, 08:49
|- - sergeeff   Цитата(011119xx @ Jul 8 2011, 11:49) Напр...   Jul 8 2011, 08:53
|- - GetSmart   Цитата(011119xx @ Jul 8 2011, 13:49) Напр...   Jul 8 2011, 08:55
|- - sergeeff   Цитата(GetSmart @ Jul 8 2011, 11:55) Для ...   Jul 8 2011, 09:00
|- - 011119xx   Цитата(sergeeff @ Jul 8 2011, 15:00) Вы, ...   Jul 8 2011, 09:09
|- - AHTOXA   Цитата(011119xx @ Jul 8 2011, 15:08) Дело...   Jul 8 2011, 09:11
||- - 011119xx   Цитата(AHTOXA @ Jul 8 2011, 15:11) Вы слу...   Jul 8 2011, 09:20
|- - GetSmart   Цитата(011119xx @ Jul 8 2011, 14:09) Дело...   Jul 8 2011, 09:18
|- - sergeeff   Цитата(GetSmart @ Jul 8 2011, 12:13) Так ...   Jul 8 2011, 09:19
|- - 011119xx   Цитата(GetSmart @ Jul 8 2011, 15:18) Так ...   Jul 8 2011, 09:35
|- - GetSmart   Цитата(011119xx @ Jul 8 2011, 14:35) Прич...   Jul 8 2011, 09:42
|- - sergeeff   Цитата(GetSmart @ Jul 8 2011, 13:42) В ст...   Jul 8 2011, 09:49
|- - GetSmart   Цитата(sergeeff @ Jul 8 2011, 14:49) А по...   Jul 8 2011, 09:55
|- - andron86   Цитата(sergeeff @ Jul 8 2011, 11:49) Указ...   Jul 8 2011, 10:48
|- - sergeeff   Цитата(andron86 @ Jul 8 2011, 13:48) По м...   Jul 8 2011, 10:55
|- - andron86   Цитата(sergeeff @ Jul 8 2011, 12:55) Вы э...   Jul 8 2011, 10:57
|- - zltigo   QUOTE (011119xx @ Jul 8 2011, 12:00) Это ...   Jul 8 2011, 09:08
||- - GetSmart   Ничё не сделал, только вошёл И сразу мошенник. С...   Jul 8 2011, 13:42
||- - zltigo   QUOTE (GetSmart @ Jul 8 2011, 16:42) Себя...   Jul 8 2011, 14:28
||- - GetSmart   Цитата(zltigo @ Jul 8 2011, 19:28) Если э...   Jul 8 2011, 14:46
||||- - vvs157   Цитата(GetSmart @ Jul 8 2011, 14:15) Пото...   Jul 8 2011, 10:21
||||- - vvs157   Цитата(GetSmart @ Jul 8 2011, 14:15) Одна...   Jul 8 2011, 10:24
|||||- - sergeeff   Цитата(vvs157 @ Jul 8 2011, 14:24) Это оч...   Jul 8 2011, 10:32
|||||- - zltigo   QUOTE (sergeeff @ Jul 8 2011, 13:32) вмес...   Jul 8 2011, 10:44
||||- - GetSmart   Цитата(zltigo @ Jul 8 2011, 15:48) Кто зд...   Jul 8 2011, 10:52
|||- - ar__systems   Цитата(vvs157 @ Jul 8 2011, 06:02) Вообще...   Jul 8 2011, 18:11
||- - zltigo   QUOTE (GetSmart @ Jul 8 2011, 12:45) void...   Jul 8 2011, 10:23
||- - GetSmart   Цитата(zltigo @ Jul 8 2011, 15:23) Замени...   Jul 8 2011, 10:28
|- - sasamy   Цитата(sergeeff @ Jul 8 2011, 13:11) Хоть...   Jul 8 2011, 12:01
|- - ReAl   Цитата(sasamy @ Jul 8 2011, 15:01) abc --...   Jul 8 2011, 15:13
|- - GetSmart   Цитата(ReAl @ Jul 8 2011, 20:13) Речь-то ...   Jul 8 2011, 15:32
||- - ar__systems   Цитата(GetSmart @ Jul 8 2011, 11:32) Я к ...   Jul 8 2011, 18:25
||- - zltigo   QUOTE (ar__systems @ Jul 8 2011, 21:25) Э...   Jul 8 2011, 18:32
|- - sasamy   Цитата(ReAl @ Jul 8 2011, 19:13) "Ой...   Jul 8 2011, 15:41
|- - zltigo   QUOTE (sasamy @ Jul 8 2011, 18:41) ууу......   Jul 8 2011, 16:41
||- - sasamy   Цитата(zltigo @ Jul 8 2011, 20:41) А если...   Jul 8 2011, 17:13
||- - zltigo   QUOTE (sasamy @ Jul 8 2011, 20:13) кроме ...   Jul 8 2011, 18:06
||- - ar__systems   Цитата(zltigo @ Jul 8 2011, 14:06) Ну в э...   Jul 8 2011, 18:15
||- - AHTOXA   Цитата(zltigo @ Jul 9 2011, 00:06) Код 5...   Jul 8 2011, 18:49
|- - ViKo   Цитата(sasamy @ Jul 8 2011, 18:41) Хотя н...   Jul 8 2011, 17:43
|- - sasamy   Цитата(ViKo @ Jul 8 2011, 21:43) Имя масс...   Jul 8 2011, 18:06
||- - ViKo   Цитата(sasamy @ Jul 8 2011, 21:06) А вы в...   Jul 8 2011, 18:28
||- - ar__systems   Я понял, откуда растет это волна негодования. Если...   Jul 8 2011, 18:38
||- - Danis   Цитата(ar__systems @ Jul 8 2011, 22:38) Д...   Jul 8 2011, 18:49
||- - sonycman   Цитата(ar__systems @ Jul 8 2011, 22:38) Д...   Jul 8 2011, 18:52
||- - zltigo   QUOTE (ar__systems @ Jul 8 2011, 21:38) В...   Jul 8 2011, 18:57
||- - AHTOXA   Цитата(zltigo @ Jul 9 2011, 00:57) Какая ...   Jul 8 2011, 19:03
|- - Danis   Цитата(ViKo @ Jul 8 2011, 20:43) Имя масс...   Jul 8 2011, 18:11
- - skripach   ЦитатаА по поводу &abc можете почитать у отцов...   Jul 8 2011, 10:08
- - skripach   sasamy, поддержу.   Jul 8 2011, 12:22
- - ViKo   http://chitay.org/c/04/0409.htm upd. и еще оттуда ...   Jul 8 2011, 13:12
- - Danis   Цитата(011119xx @ Jul 7 2011, 06:36) Необ...   Jul 8 2011, 18:02
- - 011119xx   Keil не ругается на выражение Кодptr_buffer = ...   Jul 8 2011, 18:06
- - zltigo   QUOTE (ar__systems @ Jul 8 2011, 21:02) С...   Jul 8 2011, 18:21
2 страниц V   1 2 >


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


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


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