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

 
 
> Как в си объявить массив с возможностью изменения его размера?
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
vvs157
сообщение Jul 8 2011, 10:24
Сообщение #9


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

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



Цитата(GetSmart @ Jul 8 2011, 14:15) *
Однако, компиляторописатели (хвала аллаху, что zltigo не из них) думают, что логична.
Это очень стремная радость. В один прекрасный момент решат, что это не "по фен-шую" и количество головной боли у тех, кто пользуется подобными недокументированными фичами будет весьма велико.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 8 2011, 10:32
Сообщение #10


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

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



Цитата(vvs157 @ Jul 8 2011, 14:24) *
Это очень стремная радость. В один прекрасный момент решат, что это не "по фен-шую" и количество головной боли у тех, кто пользуется подобными недокументированными фичами будет весьма велико.


А самое главное зачем писать неправильную и более длинную конструкцию

Код
char abc[10];
char *p = &abc;


вместо короткой и правильной

Код
char abc[10];
char *p = abc;

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
|||||- - zltigo   QUOTE (sergeeff @ Jul 8 2011, 13:32) вмес...   Jul 8 2011, 10:44
||||- - zltigo   QUOTE (GetSmart @ Jul 8 2011, 13:15) Одна...   Jul 8 2011, 10:40
||||- - GetSmart   Цитата(zltigo @ Jul 8 2011, 15:34) Хвала ...   Jul 8 2011, 10:41
||||- - zltigo   QUOTE (GetSmart @ Jul 8 2011, 13:41) Но в...   Jul 8 2011, 10:48
||||- - GetSmart   Цитата(zltigo @ Jul 8 2011, 15:48) Кто зд...   Jul 8 2011, 10:52
||||- - GetSmart   Цитата(zltigo @ Jul 8 2011, 15:48) Это не...   Jul 8 2011, 10:56
||||- - zltigo   QUOTE (GetSmart @ Jul 8 2011, 13:56) zlti...   Jul 8 2011, 13:31
|||- - 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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