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

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

|
QUOTE (GetSmart @ Jul 8 2011, 11:14)  Если у форума одна из задач - интерактивное обучение Задачи обучения ставят, как в младшей ясельной группе детского сада, так и в Аспирантуре. Весь вопрос в том, как позиционировать этот форум, как ясельную группу, или хотя-бы как начальную школу?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 8 2011, 08:45
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(011119xx @ Jul 8 2011, 14:06)  Это работает. Но это вариант с явным указанием размера буфера при объявлении. Я так понял иначе и нельзя. Есть ещё вариант. Стандарт C99 поддерживает автоматические переменные-массивы переменной длины: Код int mean_of_N_samples(int N) { int arr[N]; for (int i = 0; i < N; i++) { arr[i] = get_sample(); } return mean(arr, N); } Массив (обычно) создаётся на стеке. То есть, если вам ваш массив переменной длины нужен временно, то это отличный вариант.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jul 8 2011, 08:55
|

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

|
QUOTE (011119xx @ Jul 8 2011, 11:29)  Можете хоть головой об стенку биться Биться головой о стенку, причем дооолго и безрезультатно предстоит Вам, ибо при таком подходе к делу (думать не будем, учиться понимать язык не будем, будем сразу "программировать") это неизбежно  . Утверждать, Вы можете, что угодно, но приведенная мною Ваша строчка CODE uint16_t Buffer[50]; uint16_t *ptr_buffer; ..... ptr_buffer = &Buffer; не имеет право даже быть откомпилированной. Ибо бред. И тут уж либо так ptr_buffer = &Buffer[0]; либо так: ptr_buffer = Buffer;
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 8 2011, 09:00
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Цитата(GetSmart @ Jul 8 2011, 11:55)  Для работы понадобится указатель на один элемент массива (первый) и один или несколько переменных-описалово данных внутри массива. С указателем, как я уже подкорректировал внутри CODE можно работать как с массивом. Вы, надеюсь, понимаете, что ваш подход, кроме изврата, ничего не содержит? Если в вашей функции виден сам массив, на кой лишний указатель и ненужная переменная, в качестве индекса?
|
|
|
|
|
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:08
|

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

|
QUOTE (011119xx @ Jul 8 2011, 12:00)  Это CODE ptr_buffer = &Buffer; как раз и заносит в указатель адрес нулевого элемента массива. CODE ptr_buffer = &Buffer; Разумеется нет. "это" бессмысленное выражение которое любой вменяемый компилятор обязан послать нафиг.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 8 2011, 09:09
|

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

|
Цитата(sergeeff @ Jul 8 2011, 15:00)  Вы, надеюсь, понимаете, что ваш подход, кроме изврата, ничего не содержит? Если в вашей функции виден сам массив, на кой лишний указатель и ненужная переменная, в качестве индекса? Дело в том что когда я читаю ширину и высоту символа мне нужно создать массив размером = ширина*высота и в этот массив скопировать некую картинку такого размера. Это скажем так: фон для символа. Потом в этот массив копируется сам символ, но при этом затирает только очертания символа. Потом из этого массива данные выводятся в дисплей Цитата(zltigo @ Jul 8 2011, 15:08)  Разумеется нет. "это" бессмысленное выражение которое любой вменяемый компилятор обязан послать нафиг. Да ну вас! Ни один компилятор никогда не посылал.
|
|
|
|
|
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.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|