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

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


.
******

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



Цитата(ReAl @ Jul 8 2011, 20:13) *
Речь-то идёт не о применении & к имени массива, а о выражении, присвавающем результат переменной другого типа.

Я к тому и вёл, что ТС взял адрес массива вместо адреса нулевого элемента массива. Причём адреса оба равны. Только типом отличаются и только компилятор руганётся на это. При использовании нетипизированных указателей (например в параметре функции) или при явном приведении типа (безусловно лучше без него, но...) программа заработает так, как и хотел ТС. Человек на начальном уровне знаком с Си и только истеричка будет так реагировать на его мелкие ошибки. Нельзя же при присваивании указателя на однин тип указателю на другой тип заявлять, что выражение бессмысленное!?

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


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


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(GetSmart @ Jul 8 2011, 11:32) *
Я к тому и вёл, что ТС взял адрес массива вместо адреса нулевого элемента массива. Причём адреса оба равны. Только типом отличаются и только компилятор руганётся на это.


Самое смешное, что для того чтобы в этом убедиться, не обязательно даже читать книжку. Достаточно потратить 5 минут на то, чтобы скомпилировать это выражение. g++ выдает вполне развернутое сообщение об ошибке, из которого ясно, что проблема в неправильном типе. Но гуру экспериментировать западло, это же значит надо в собственных непоколебимых знаниях усомниться.


Цитата(zltigo @ Jul 8 2011, 14:21) *
Мне уже точно надоело sad.gif. Похоже Вы читать не умеете sad.gif. Именно о ТИПЕ - "Что указатель на int не является кирпичом" я, подчеркиваю я, а не вертящийся на сковородке GetSmart речь все время и вел и веду. Не приписываете мне то чего я не говорил. Выражение присваивающее указателю на int указатель на массив БЕССМЫСЛЕННО из-за разных типов.

Бессмысленно? Это на С, которому грубо говоря начихать на типы? Ну-ну. GetSmart все правильно написал, на сковордке это вы вертитесь, впадая в истерику от УЖАСНЫХ УЖАСНЫХ УЖАСНЫХ ошибок sm.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 8 2011, 18:32
Сообщение #8


Гуру
******

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



QUOTE (ar__systems @ Jul 8 2011, 21:25) *
Это на С, которому грубо говоря начихать на типы?

Хорошо быть страусом и игнорировать очевидные вещи, типа наличия выделенной памяти под указатель и приведенные мной вопли сишного компилятора, которому таки не начихать на типы. Считайте, что в своей глупости Вы меня уже убедили. Достаточно, можете не продолжать.



--------------------
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
|- - 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
|- - 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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