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

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

|
Это Код ptr_buffer = &Buffer; как раз и заносит в указатель адрес нулевого элемента массива. Код ptr_buffer = &Buffer; и Код ptr_buffer = &Buffer[0]; одно и тоже
|
|
|
|
|
Jul 8 2011, 09:11
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(011119xx @ Jul 8 2011, 12:00)  Это Код ptr_buffer = &Buffer; как раз и заносит в указатель адрес нулевого элемента массива. Код ptr_buffer = &Buffer; и Код ptr_buffer = &Buffer[0]; одно и тоже  Хоть меня частенько критикуют за любовь к печатным изданиям, но вам, любезный, книги надобно почитать. Если объявлен массив abc[10], то abc - это указатель на массив и его значение в точности равно адресу первого элемента, т.е. &abc[0]. А &abc - дает адрес указателя на массив, что, согласитесь, совсем не то, что вы хотите получить и использовать. на что вам и указал уважаемый zltigo.
|
|
|
|
|
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, 10:15
|
.
     
Группа: Участник
Сообщений: 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
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 8 2011, 10:40
|

Гуру
     
Группа: Свой
Сообщений: 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 Но согласитесь, на УЖАС, УЖАС, УЖАС это не тянет. Так, мелкое хулиганство  Не соглашусь, однако.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 8 2011, 10:41
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo @ Jul 8 2011, 15:34)  Хвала Аллаху, что у компиляторописателей голова растет не из ануса, посему на это: ... Реагируют посылкой в анус того, кто так пишет. Но всё-таки она вертится!? Ведь результат &mass является адресом массива, хоть и с другими атрибутами, чем первый его элемент. Чтобы не париться, его всегда можно присвоить нетипизированному указателю. И это работает не только с массивами, но и с записами, юнионами, функциями и возможно ещё что упустил. Очень интересная новость после стольких лет...
Сообщение отредактировал GetSmart - Jul 8 2011, 10:45
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 8 2011, 10:48
|

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

|
QUOTE (GetSmart @ Jul 8 2011, 13:41)  Но всё-таки она вертится!? Ведь результат &mass является адресом массива, хоть и с другими атрибутами, чем первый его элемент. Что значит "вертится" и "является адресом", если компиляторы ВЫВАЛИВАЕТСЯ с ошибкой и соответственно НЕ генерят никакого кода? Кто здесь пытается вертеться, как уж на сковородке, видно невооруженным взглядом  . QUOTE И это работает не только... Это не работает. Как там было у Задорнова - "Пива нет. СОВСЕМ нет!" - СОВСЕМ не раболтает. О чем я сразу и написал увидя этo: CODE uint16_t Buffer[50]; uint16_t *ptr_buffer; ..... ptr_buffer = &Buffer; Именно ЭТО увидел и именно об ЭТОМ а не чем-то другом написал.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 8 2011, 10:56
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo @ Jul 8 2011, 15:48)  Это не работает. Как там было у Задорнова - "Пива нет. СОВСЕМ нет!" Преобразования типов нет. СОВСЕМ НЕТ! © zltigo С сегодняшнего дня типизированные указатели не могут присваиваться к другим типизированным указателям. Аминь. Upd. zltigo, Вы верите, что void *p можно присвоить адрес любого типа? Даже так p = &mass. Это что, незаконно? СОВСЕМ? Вобщем если пива нет, но очень хочется, то пиво есть
Сообщение отредактировал GetSmart - Jul 8 2011, 11:14
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 8 2011, 13:31
|

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

|
QUOTE (GetSmart @ Jul 8 2011, 13:56)  zltigo, Вы верите, что void *p можно присвоить адрес любого типа? Даже так p = &mass. Это что, незаконно? СОВСЕМ? Вобщем если пива нет, но очень хочется, то пиво есть  Хватит пытаться вертеться, о присвоении указателя на void. Речь не шла. Когда Вы пытаясь, как Вам кажется, "изящно" выкрутиться ПОДМЕНИЛИ в исходном тексте указатель на short указателем на void, я Вам сразу указал на это, Вы начали передергивать подсовывая другой заведомо глотаемый сишным компилятором вариант. QUOTE Вобщем если пива нет, но очень хочется, то пиво есть Да, тогда такие, как Вы насцав а бокал делаете вид что лично Вы пьете пиво  . Все. Точка, шулер Вы наш  . QUOTE (ViKo @ Jul 8 2011, 16:12)  Со стеком или любым другим ДИНАМИЧЕСКИМ выделением памяти проблем, совершенно нет по определению. Единственно, что выделять фиг знает какой объем памяти в стеке явно не кошерно, посему остается естественное и контролируемое на ошибки динамическое выделение памяти из heap. Другое дело, что все идет к тому, что для данного случая просто все надо делать на лету, а не бездумно трясти пальму.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
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 страниц
1 2 >
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|