Как вы относитесь к паскалю?
, (есть гипотеза)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
| Страницы: (20) « Первая ... 17 18 [19] 20 все ( Перейти к последнему сообщению ) |
Как вы относитесь к паскалю?
, (есть гипотеза)
|
Сообщ.
#271
,
|
|
|
|
Массив, размер которого задается/меняется в рантайме? |
|
Сообщ.
#272
,
|
|
|
|
Цитата D_KEY @ Массив, размер которого задается/меняется в рантайме? Ну, в таком случае не будет, потому что у нас не массив, а указатель. |
|
Сообщ.
#273
,
|
|
|
|
Цитата MyNameIsIgor @ Цитата D_KEY @ Массив, размер которого задается/меняется в рантайме? Ну, в таком случае не будет, потому что у нас не массив, а указатель. Это с точки зрения типизации сишной. Так с ее точки зрения в Си вообще нет динамических массивов. |
|
Сообщ.
#274
,
|
|
|
|
Цитата D_KEY @ Это с точки зрения типизации сишной. Так с ее точки зрения в Си вообще нет динамических массивов. Ага, нет. |
|
Сообщ.
#275
,
|
|
|
|
Цитата jack128 @ А нету их. Неудивительно, что не видишь. Разница есть между статическими и динамическими. Причём одинаковая в обоих языках. В чем по твоему отличие стат массивов в дельфе от сишных ? Я что то вообще отличий не вижу. |
|
Сообщ.
#276
,
|
|
|
|
Цитата MyNameIsIgor @ Ага, нет. так лучше бы и синтаксиса не было. Ну согласись, пи***ц же: ![]() ![]() #include <iostream> using namespace std; void f(int x[]){ cout << sizeof(x) << endl; } int main() { // your code goes here int x[] = {1,2,4}; cout << sizeof(x) << endl; f(x); return 0; } Цитата Qraizer @ Разница есть между статическими и динамическими. Причём одинаковая в обоих языках. ну вот Си ные товарищи говорят, что в С нету дин массивов. А дельфи есть. Так что разница разная ;-) |
|
Сообщ.
#277
,
|
|
|
|
Цитата jack128 @ Ну согласись, пи***ц же: Так массивы неявно всегда в указатель преобразуются. Та же операция индексации определена в терминах указателей, а на массивы распространяется как раз из-за такого преобразования. |
|
Сообщ.
#278
,
|
|
|
|
Цитата jack128 @ так лучше бы и синтаксиса не было А синтаксиса и нет... Цитата jack128 @ Ну согласись, пи***ц же У массивов много странного, да. Таков уж C Добавлено Цитата jack128 @ ну вот Си ные товарищи говорят, что в С нету дин массивов. В C то есть Добавлено Цитата OpenGL @ Так массивы неявно всегда в указатель преобразуются. Та же операция индексации определена в терминах указателей, а на массивы распространяется как раз из-за такого преобразования. Первое предложение верно (если убрать "всегда"). А вот второе... как минимум непонятно. |
|
Сообщ.
#279
,
|
|
|
|
Ошибаешься, jack128. А ну-ка, компильни:
![]() ![]() VAR arr1: ARRAY OF Integer; PROCEDURE proc(VAR arr: ARRAY OF Integer); BEGIN SetLength(arr, 100) END; BEGIN proc(arr1); SetLength(arr1, 100) END. ![]() ![]() TYPE DynArray = ARRAY OF Integer; VAR arr1: DynArray; PROCEDURE proc(VAR arr: DynArray); BEGIN SetLength(arr, 100) END; BEGIN proc(arr1); SetLength(arr1, 100) END. А в С/Плюсах всё в порядке, никаких трындецов. Разные сущности и выглядят по-разному. Мне что-то кажется, лучше б в Дельфях синтаксиса не было. |
|
Сообщ.
#280
,
|
|
|
|
Цитата MyNameIsIgor @ А вот второе... как минимум непонятно. За что купил - за то и продаю В этой теме Qraizer говорил именно об этом. |
|
Сообщ.
#281
,
|
|
|
|
Цитата OpenGL @ В этой теме Qraizer говорил именно об этом. Да, странно. Qraizer прокомментирует. Индексация хоть и определена в терминах указателей, но я всегда считай, что у массивов, как у встроенного типа, есть оператор индексации, и преобразование к указателю здесь ни при чём. |
|
Сообщ.
#282
,
|
|
|
|
Qraizer Убедил.
ЗЫ Это jack128 |
|
Сообщ.
#283
,
|
|
|
|
Цитата MyNameIsIgor @ и преобразование к указателю здесь ни при чём. А как же 10[arr] равнозначное arr[10]? Хотя надо в стандарте глянуть. |
|
Сообщ.
#284
,
|
|
|
|
MyNameIsIgor, нету. Зачем? Операция индексирования определена через сложение и разыменование, каковые определяются для указателей, а массивы умеют кастоваться в указатели, причём в весьма "приоритетном" порядке. Там в 4 Standard conversions в 1) и 2) прямо об этом сказано.
D_KEY, не надо смотреть. Будучи определённой через сложение, каковое, как известно, коммутативно, эта симметрия вытекает сама собой. Да и вообще, там явный коммент есть: Цитата 8.3.4 Arrays 6 Except where it has been declared for a class (13.5.5), the subscript operator [] is interpreted in such a way that E1[E2] is identical to *((E1)+(E2)). Because of the conversion rules that apply to +, if E1 is an array and E2 an integer, then E1[E2] refers to the E2-th member of E1. Therefore, despite its asymmetric appearance, subscripting is a commutative operation. |
|
Сообщ.
#285
,
|
|
|
|
Цитата Qraizer @ D_KEY, не надо смотреть... там явный коммент есть |