The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка программирования Rust 1.40"
Отправлено anon2, 25-Дек-19 21:28 
>> Массив это не более чем сырая память, можно массив int mas[10], внезапно сделать типа char, просто обращаясь к нему как char* x=(char*)mas, и получим массив из 40 символов

С точки зрения компилятора массив это не просто сырая память, а набор элементов определённого типа. И кастинг "char* x=(char*)mas" нарушает strict aliasing rules и как следствие может приводить к UB (но для char * вроде пока? есть исключение из правил). Но не суть.

>> Насчет обратных утверждений массив это вполне себе память, переменная тоже память, попробуем найти разницу между массивом и переменной, возьмем int x=0 и обратимся к ней как char* s=(char*)&x и внезапно переменная становится массивом

Ага. Оператор & создаёт ссылку на массив. Хотя опять нарушение strict aliasing из-за кастинга к char*. Только не обращайтесь к переменной x через указатель s - получите UB.

>> Синтаксический сахар это обращения к значению как имя[index]

Не-а.
Это _базовая_ операция обращения к элементу массива - даже в Java такая есть.
А "сахар" - это *ptr (эквивалент ptr[0]) или ptr-> (эквивалент ptr[0].) - этого в Java нет.
И арифметика указателей тоже "сахар" - и этого ни в Pascal ни в Java нет.
Поинтер в C - это алиас массива.

И это особенность C по сравнению, скажем с Java, где всё кроме примитивных типов - объект, а ссылка на объект вроде как и поинтер (может быть null), но с этим поинтером нельзя работать как с массивом.


А еще только C++-сники, в массе своей не знающие C, пишут * возле типа, что не правильно :)
Пример:
    int x;
    int(*a) = &x;   // - объявление поинтера,
    (int*)b = &x;   // - не компилируется :) Ибо (int*) b не есть l-value.
    (int*)(a = &x); // - наверно так? Но это не объявление поинтера.
    *(int*)a = x;   // - а можно ещё так. Но это тоже не объявление поинтера.
    (int*)(c) = &x; // - и так тоже не компилируется.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру