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

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


Знающий
****

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


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

Группа: Свой
Сообщений: 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
sasamy
сообщение Jul 8 2011, 15:41
Сообщение #6


Знающий
****

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



Цитата(ReAl @ Jul 8 2011, 19:13) *
"Ой".

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


ууу... тут наверно книжки не помогут - не нужно изобретать своих определений, все уже определено без вас, в том числе термин "константа"

Цитата
In computer programming, a constant is an identifier whose associated value cannot typically be altered by the program during its execution (though in some cases this can be circumvented, e.g. using self-modifying code).


Хотя написал некорректно, смысл в том что имя массива это константа и под нее вообще не выделяется память, память выделяется для массива - никакого адреса поэтому не получить.

Сообщение отредактировал sasamy - Jul 8 2011, 16:02
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 8 2011, 17:43
Сообщение #7


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

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



Цитата(sasamy @ Jul 8 2011, 18:41) *
Хотя написал некорректно, смысл в том что имя массива это константа и под нее вообще не выделяется память, память выделяется для массива - никакого адреса поэтому не получить.

Имя массива - это и есть его адрес, адрес его первого элемента. И почему ж тогда "не получить никакого адреса"? Это в классической книге основоположников C описано.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Jul 8 2011, 18:06
Сообщение #8


Знающий
****

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



Цитата(ViKo @ Jul 8 2011, 21:43) *
Имя массива - это и есть его адрес, адрес его первого элемента. И почему ж тогда "не получить никакого адреса"? Это в классической книге основоположников C описано.


А вы вообще в курсе о каком адресе речь ?
http://electronix.ru/forum/index.php?showt...st&p=949672

адрес указателя-константы мы никогда не получим потому что в памяти его просто нет, хотя я чую эти объяснения могут тянуться бесконечно - троллям ничего не объяснишь, более того через пару-тройку постов начнут утверждать что это именно я говорил обратное sm.gif
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
|- - GetSmart   Цитата(sergeeff @ Jul 8 2011, 14:11) А ...   Jul 8 2011, 09:30
||- - sergeeff   Цитата(GetSmart @ Jul 8 2011, 13:30) Прав...   Jul 8 2011, 09:37
||- - GetSmart   Цитата(sergeeff @ Jul 8 2011, 14:37) Что ...   Jul 8 2011, 09:45
||- - vvs157   Цитата(GetSmart @ Jul 8 2011, 13:45) Чему...   Jul 8 2011, 10:02
|||- - GetSmart   Цитата(vvs157 @ Jul 8 2011, 15:02) .. в с...   Jul 8 2011, 10:15
||||- - 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
||||- - 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
|- - 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
|- - 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, 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.01573 секунд с 7
ELECTRONIX ©2004-2016