Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 12 13 14 15 16 17 18 [19] 20 21   вперед  Ctrl
 Re: Си и массив как аргумент функции  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3216
mini.weblab, если хочется обойтись без квадратных скобок, то можно так:
int
  *e = arr + n - 1,
  i = n;
do
  *e-- = i--;
while (e > arr);
21 май 20, 13:34    [22137030]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
mini.weblab
Member

Откуда:
Сообщений: 820
Dimitry Sibiryakov,

не суть (не про компиляторы речь), в данном случае мы говорим о массиве как о "синтаксическом сахаре"
1) т.е. нужно представить, что массивов в языке С нет
2) и реализовать функционал самостоятельно (средствами языка С!)

Сообщение было отредактировано: 21 май 20, 13:39
21 май 20, 13:35    [22137032]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
petrav
Member

Откуда:
Сообщений: 2105
mini.weblab
Dimitry Sibiryakov,

не суть (не про компиляторы речь), в данном случае мы говорим о массиве как о "синтаксическом сахаре"
1) т.е. нужно представить, что массивов в языке С нет
2) и реализовать функционал самостоятельно (средствами языка С!)

Тогда вам точно нужно попробовать alloca(). Для массивов на стеке. Но как решить проблему массивов в статической области памяти...
22 май 20, 18:47    [22137861]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
mayton
Member

Откуда: loopback
Сообщений: 46496
Всегда удивляло что какой-то пустяк - вызывает бурные и ожесточенные дискуссии.

Вот проблемы современной науки - никому не интересны. Как генетки ищут лекарство
от вирусов. Как машинное зрение узнает лица. Как Alpha-Go научился играть в китайские
шашки лучше гроссмейстеров. Как томограф восстанавливает трехмерное изображение
по одной проекции. Как квантовый комп должен сделать факторизацию длинного целого
числа в бесконечном параллелизме и без конкуренций.

Но вот массив и как его поломать - вызывает прямо-таки "подрыв пуканов..."

P.S. С пятницей вобщем.
22 май 20, 19:35    [22137878]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
petrav
Member

Откуда:
Сообщений: 2105
mayton

Вот проблемы современной науки - никому не интересны. Как генетки ищут лекарство
от вирусов. Как машинное зрение узнает лица. Как Alpha-Go научился играть в китайские
шашки лучше гроссмейстеров. Как томограф восстанавливает трехмерное изображение
по одной проекции. Как квантовый комп должен сделать факторизацию длинного целого
числа в бесконечном параллелизме и без конкуренций.

Почему никому не интересны? Многим интересны, смотрим научно популярные ролики (статьи лень читать), а многие и читают.

mayton
Но вот массив и как его поломать - вызывает прямо-таки "подрыв пуканов..."

Я не знаю у кого там пуканы подорвались (хотя я просто пальцем тыкать не хочу). Но я вижу, что вы mayton просто не поняли моего изначального посыла. Основной мой наблюдательный смысл в том, что в плане массивов — язык Си спроектирован неправильно. И это наследие тянет нас до сих пор куда-то не в ту сторону.

Т.е. это наводит на мысль, как неудачное проектное решение оказывает влияние десятилетиями, а может и столетиями. Это вопрос проектирования языка программирования и оказания воздействия (прямого или косвенного) на всю планету. А это уже очень сложно.
22 май 20, 20:01    [22137897]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50033

mayton
Как томограф восстанавливает трехмерное изображение по одной проекции.

А он по одной и не восстанавливает. Там делаются тысячи снимков под разными углами.

Posted via ActualForum NNTP Server 1.5

22 май 20, 20:11    [22137909]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
Алексей Роза
Member

Откуда: РФ
Сообщений: 197
mayton
Всегда удивляло что какой-то пустяк - вызывает бурные и ожесточенные дискуссии.

Вот проблемы современной науки - никому не интересны. Как генетки ищут лекарство
от вирусов. Как машинное зрение узнает лица. Как Alpha-Go научился играть в китайские
шашки лучше гроссмейстеров. Как томограф восстанавливает трехмерное изображение
по одной проекции. Как квантовый комп должен сделать факторизацию длинного целого
числа в бесконечном параллелизме и без конкуренций.

Но вот массив и как его поломать - вызывает прямо-таки "подрыв пуканов..."

P.S. С пятницей вобщем.

всё самое сложное всегда состоит из простейших, элементарных кирпичиков, понимание которых есть фундамент для великих открытий
т.е. прежде чем строить что-то большое и сложное надо разобраться в основах

Сообщение было отредактировано: 22 май 20, 20:38
22 май 20, 20:39    [22137926]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
Dima T
Member

Откуда:
Сообщений: 14743
mayton
Всегда удивляло что какой-то пустяк - вызывает бурные и ожесточенные дискуссии.

ИМХО это обычное явление потому что в С/С++ оно устроено не так как в других ЯП. Разработчик на другом ЯП привык что при выходе за пределы массива ошибка происходит, а тут нет ошибки, привык что массив - это объект, а тут не объект и т.д. и т.п.

Мне довелось С изучать после АСМа, поэтому отношусь с пониманием к этим особенностям. Но С++ не понимаю, особенно шаблоны бесят когда из-за маленькой опечатки получаю сотни строк ошибок при компиляции.
22 май 20, 21:14    [22137938]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3216
petrav
mayton
Но вот массив и как его поломать - вызывает прямо-таки "подрыв пуканов..."

Я не знаю у кого там пуканы подорвались (хотя я просто пальцем тыкать не хочу). Но я вижу, что вы mayton просто не поняли моего изначального посыла. Основной мой наблюдательный смысл в том, что в плане массивов — язык Си спроектирован неправильно. И это наследие тянет нас до сих пор куда-то не в ту сторону.
И что же именно неправильно спроектировано? То, что нет проверок на границы? Это нормально! Если кому-то из-за криоворукости требуется замедлить своё ПО дополнительными проверками, можно обернуть массив в шаблон структуры с перегрузкой оператора [] и проверкой в попадания в границы массива.
22 май 20, 23:16    [22137994]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
Изопропил
Member

Откуда:
Сообщений: 31465
petrav
язык Си спроектирован неправильно.

как страшно жить.
22 май 20, 23:16    [22137995]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3216
Dima T
mayton
Всегда удивляло что какой-то пустяк - вызывает бурные и ожесточенные дискуссии.

ИМХО это обычное явление потому что в С/С++ оно устроено не так как в других ЯП. Разработчик на другом ЯП привык что при выходе за пределы массива ошибка происходит, а тут нет ошибки, привык что массив - это объект, а тут не объект и т.д. и т.п.
Вообще-то, с точки зрения стандарта, массив, это объект. Для стандарта вообще любая lvalue или xvalue даже скалярного типа, это объект. Просто такая терминология.
22 май 20, 23:18    [22137997]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
petrav
Member

Откуда:
Сообщений: 2105
rdb_dev
petrav
пропущено...

Я не знаю у кого там пуканы подорвались (хотя я просто пальцем тыкать не хочу). Но я вижу, что вы mayton просто не поняли моего изначального посыла. Основной мой наблюдательный смысл в том, что в плане массивов — язык Си спроектирован неправильно. И это наследие тянет нас до сих пор куда-то не в ту сторону.

И что же именно неправильно спроектировано? То, что нет проверок на границы? Это нормально! Если кому-то из-за криоворукости требуется замедлить своё ПО дополнительными проверками, можно обернуть массив в шаблон структуры с перегрузкой оператора [] и проверкой в попадания в границы массива.

Неправильно спроектировано, то что в Си массив ведёт себя не так как все остальные типы.
22 май 20, 23:33    [22138004]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3216
petrav
Неправильно спроектировано, то что в Си массив ведёт себя не так как все остальные типы.
Лично мне это никогда не мешало, всегда вертел массивом как вздумается... Хочешь - через индексы, а не хочешь - через указатели. В чём проблема?
22 май 20, 23:42    [22138006]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
petrav
Member

Откуда:
Сообщений: 2105
rdb_dev
petrav
Неправильно спроектировано, то что в Си массив ведёт себя не так как все остальные типы.
Лично мне это никогда не мешало, всегда вертел массивом как вздумается... Хочешь - через индексы, а не хочешь - через указатели. В чём проблема?

Проблема в том, что тип "массив" ведёт себя не так как все остальные типы. Остальные типы можно передать по указателю и по значению.

И только массив в Си нельзя передать ни по значению, ни по указателю на массив. А только по указателю на тип элемента массива.

И у массива отсутствует оператор копирования. Всё это ничем не обоснованные исключения из правил и это плохо.
22 май 20, 23:52    [22138011]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
a guest
Member

Откуда:
Сообщений: 255
petrav
И только массив в Си нельзя передать ни по значению, ни по указателю на массив.
В смысле нельзя передать по указателю на массив?
23 май 20, 00:06    [22138012]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
a guest
Member

Откуда:
Сообщений: 255
mayton
Всегда удивляло что какой-то пустяк - вызывает бурные и ожесточенные дискуссии.

Вот проблемы современной науки - никому не интересны. Как генетки ищут лекарство
от вирусов. Как машинное зрение узнает лица. Как Alpha-Go научился играть в китайские
шашки лучше гроссмейстеров. Как томограф восстанавливает трехмерное изображение
по одной проекции. Как квантовый комп должен сделать факторизацию длинного целого
числа в бесконечном параллелизме и без конкуренций.
Да прост позиция любителя рассуждать на кучу тем, в которых любитель не разбирается, уже занята, вот никто и не лезет.
23 май 20, 00:12    [22138015]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3216
petrav
Проблема в том, что тип "массив" ведёт себя не так как все остальные типы. Остальные типы можно передать по указателю и по значению.

И только массив в Си нельзя передать ни по значению, ни по указателю на массив. А только по указателю на тип элемента массива.

И у массива отсутствует оператор копирования. Всё это ничем не обоснованные исключения из правил и это плохо.
Даже в таком "высокоуровневом" языке, как Visual Basic, массивы и строки передаются только по ссылке. Ну, просто потому, что они изначально так представлены - ссылкой и на сколько мне известно, подавляющее большинство языков передают массив по ссылке. Их известных мне исключений - Pascal, где по умолчанию массив будет скопирован... В стек?!
23 май 20, 00:14    [22138018]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
petrav
Member

Откуда:
Сообщений: 2105
a guest
petrav
И только массив в Си нельзя передать ни по значению, ни по указателю на массив.
В смысле нельзя передать по указателю на массив?

В прямом смысле. Только не надо мне примитивные коды на Си тулить. Там будет не указатель на массив, а указатель на тип элемента массива. Это разные вещи.
23 май 20, 00:19    [22138023]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3216
petrav
В прямом смысле. Только не надо мне примитивные коды на Си тулить. Там будет не указатель на массив, а указатель на тип элемента массива. Это разные вещи.
Ты не прав!
Посмотри очень внимательно тут 22136952 пример в спойлере. Там массив представлен именно указателем на массив (pa), а не указателем на первый элемент массива и его sizeof по его разыменованию (dereference) даёт размер массива в байтах, а не размер элемента.
23 май 20, 00:25    [22138026]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
booby
Member

Откуда:
Сообщений: 1935
rdb_dev,
зря ты так...
в общем разумнее было бы не лезть ...

там другая система передачи параметров.
В ней есть явные модификаторы передачи по значению или по ссылке, которые работают для встроенных типов.
Поскольку массивы и типы - типы встроенные - они замечтательно передаются и по ссылке и по значению по желанию программиста.

2mini.weblab,
это ты во всём виновата, вот написала:
автор
начнем с int a[3] = {1,2,3}


теперь еще 20 страниц впереди на тему тип массив или не тип.

посмотри, между делом, как начать с int a[3] = {1}
а что касается "the pointer version will in general be faster",
это минорный намек на то, что обычно сдвигать значение текущего указателя на единицу
незаметно быстрее, чем проделывать полное вычисление индексного выражения.
23 май 20, 00:31    [22138028]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
petrav
Member

Откуда:
Сообщений: 2105
Атакуют любители Бейсика, который я видел только на ZX Spectrum в начале 90-х. Предать этих любителей анафеме!!!
23 май 20, 00:34    [22138029]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3216
booby
rdb_dev,
зря ты так...
в общем разумнее было бы не лезть ...

там другая система передачи параметров.
В ней есть явные модификаторы передачи по значению или по ссылке, которые работают для встроенных типов.
Поскольку массивы и типы - типы встроенные - они замечтательно передаются и по ссылке и по значению по желанию программиста.
Как так?!
Там же белым по чёрному:
Reference Types
A reference type stores a reference to its data. Reference types include the following:
· String
· All arrays, even if their elements are value types
· Class types, such as Form
· Delegates
23 май 20, 00:45    [22138034]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
booby
Member

Откуда:
Сообщений: 1935
petrav,

ты своим делом занимайся - предавай анафеме массивы в Си.
23 май 20, 00:46    [22138035]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
a guest
Member

Откуда:
Сообщений: 255
petrav
a guest
пропущено...
В смысле нельзя передать по указателю на массив?

В прямом смысле.
void f(int (*a)[3]) {}

int main(void)
{
	int a[3];
	f(&a);
}
23 май 20, 00:52    [22138036]     Ответить | Цитировать Сообщить модератору
 Re: Си и массив как аргумент функции  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3216
petrav, помниться, в начале 90-ых на своём ZX Spectrum с помощью бейсиковской команды POKE забивал в память машинные коды предварительно написанного на бумажке ассемблерных инструкций алгоритма и переведённых по таблице в машинные коды. Вывод точки на экран по заданным в регистрах координатам получился размером в 48 байт. :) Ты ведь помнишь структуру видеобуфера Спектрума, ага? :)
23 май 20, 00:53    [22138037]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 12 13 14 15 16 17 18 [19] 20 21   вперед  Ctrl
Все форумы / C++ Ответить