1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

PTR, LNK.

Тема в разделе "WASM.ZEN", создана пользователем Indy_, 4 авг 2017.

  1. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    Здрасте.

    Возникла проблема с определением понятий. Что есть указатель, что ссылка. Нужно дать чёткое определение.

    По мойму указатель - это адрес, значение по которому ничего не адресует(не является указателем).
    Ссылка - указатель на указатель. Это адрес переменной, который содержит другой адрес. Причём этот адрес(ссылка) адресуется - к ней есть обращения(тоесть ссылки на указатель на указатель).

    Эти понятия крайне запутанны, поэтому следует разобраться, дать определения или ввести новые понятия. Манипуляции ссылками и указателями в привычном понимании удаляет ясность, тупо путает.

    Нужна иная система понятий.
     
  2. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.484
    Адрес:
    Россия
    Никогда не видел кода с++ с ссылками.
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    yashechka,

    Я не говорил про яп.
     
  4. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.484
    Адрес:
    Россия
    Всё это философские моменты, тут можно долго тереть.
     
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    yashechka,

    Нет, это важно. Я написал большую часть статьи но понимаю что описание не годится, так как слишком запутанно из за отсутствия чёткой терминологии. Ссылки на ссылки, фиксапы по ссылкам и указатели по ссылкам/на ссылки - это не читаемо(я сам с трудом понимаю). Поэтому и спросил.
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    Допустим есть адрес в переменной. До загрузки этого адреса это указатель, а после обращения к переменной это уже ссылка(в регистре) ?
    Это тупик, путаница. Нужно найти норм определения для понятного описания.
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.132
    Адрес:
    Russia
    Дык все ж уже разжевано в учебниках и книгах по Плюсам.

    С точки зрения низкого уровня ссылка ничем не отличается от указателя. Тот же самый указатель, только сбоку.
    Так что - если вам нужен указатель на указатель то вам надо так и писать . void** data. Вот вам будет то, о чем вы писали.

    Разница между указателями и ссылками появляется в работе с ними.

    К примеру есть фукнция
    MyStrict* GetStructFunc();

    тогда:

    MyStrict* a = GetStructFunc();
    тогда вам надо адресовываться так
    a->field1 = 0;

    С ссылками это бы выглядело так

    MyStrict& a = *GetStructFunc();
    a.field1 = 0;

    У ссылок несколько свойств особенных
    1) - они не могут быть неинициализированными
    2) если передаются в функцию с параметром const - то копирования не происходит.
     
  8. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.484
    Адрес:
    Россия
    Я тоже долго думал про них, решил забыть про ссылки, оставить в голове только указатели.
     
  9. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    TermoSINteZ,

    Я написал выше что вопрос не имеет отношения к яп.

    Смотрите есть адрес. Адрес не существует без данных, тоесть на него должна быть адресация. Указатель загружен в регистр или переменную. И происходит выборка(обращение) по этому указателю. Что тогда есть ссылка, это значение регистра с указателем или без прямой адресации ссылки нет.. А если по указателю расположен указатель, то что тогда, что есть ссылка. Это какой то бред, откуда вообще взялось понятие ссылки, сишка ?

    Ссылка не существует без обращения по указателю, пока не произошла выборка данных, но тогда что содержит регистр при косвенной адресации ?
     
  10. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.484
    Адрес:
    Россия
    Думаю такие вопросы, нужно спрашивать у самого мертвого страуса.))
     
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    Если глубоко не копать, то эти вопросы не возникают. Но для описания это важно, вы тоже будите читать и не поймёте из за путаницы понятий.

    Есть некий адрес. Это указатель ?
    Или это указатель если происходит адресация ?
    Адресуемый указатель это ссылка ?
    Значение этого адреса в регистре это тоже ссылка ?
     
  12. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.484
    Адрес:
    Россия
    Что-то Вы, дорогой, слишком заморочены для пятницы.
     
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    yashechka,

    А вы что то слишком пассивны вроде бы как в элементарном фундаментальном вопросе.

    У меня просто отсутствие ясности(тупик), соответственно мотивация на решение.
     
  14. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.484
    Адрес:
    Россия
    Я технарь, я не очень люблю философствовать, тем более Вы не наливаете))
     
  15. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    yashechka,

    Если вы понимаете суть, то не важно технарь или есчо что. Мыслительный процесс у всех одинаков, но иногда нужна помощь(неужели). Так как, как бы ты не был развит, то всё равно когда то нужно будет чьёто мнение, хотя бы для того, что бы поняли описание.
    Если вы не хотите думать, то зачем вы тогда тут отвечаете. Найдите другую тему, где вы будите уместны, без обид :)
     
  16. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.132
    Адрес:
    Russia
    yashechka, Яша плиз, если вы не в теме и вам нечего по существу сказать - не пишите, не в обиду. Это ж не хип

    Indy_
    Инди, вы меня удивляете, если вам не интересует ЯП (ООП) , а ссылка это больше сущность ЯП, то в чем вопрос? Ведь по сути чтоб узнать как компилируется ссылка, достаточно посмотреть код компилятора. Я думаю вы владеете этим.
    По терминологии я, как мне показалось достаточно четко показал в чем различие

    По низкому уровню - ок. Заходим https://godbolt.org/
    Вбиваем код

    Код (C):
    1. #include <stdio.h>
    2.  
    3. struct MyStruct
    4. {
    5.     int field1;
    6.     int field2;
    7. };
    8. // Type your code here, or load an example.
    9. int main() {
    10.     MyStruct nativeStruct = {0};
    11.  
    12.     MyStruct* pointer = &nativeStruct;
    13.     printf("%x", pointer);
    14.     printf("%x", pointer->field1);
    15.     MyStruct& link = *pointer;
    16.  
    17.     printf("%x", link);
    18.     printf("%x", link.field1);
    19. }
    Видим результат (Выбираем компилятор X86-64 CL (майкрософт компайлер)

    Код (ASM):
    1. $SG4882 DB        '%x', 00H
    2. $SG4883 DB        '%x', 00H
    3. $SG4884 DB        '%x', 00H
    4. $SG4885 DB        '%x', 00H
    5. EXTRN   __acrt_iob_func:PROC
    6. EXTRN   __stdio_common_vfprintf:PROC
    7. pointer$ = 32
    8. nativeStruct$ = 40
    9. link$ = 48
    10. main    PROC
    11.         push     rdi
    12.         sub      rsp, 64              ; 00000040H
    13.         mov      DWORD PTR nativeStruct$[rsp], 0
    14.         lea      rax, QWORD PTR nativeStruct$[rsp+4]
    15.         mov      rdi, rax
    16.         xor      eax, eax
    17.         mov      ecx, 4
    18.         rep stosb
    19.         lea      rax, QWORD PTR nativeStruct$[rsp]
    20.         mov      QWORD PTR pointer$[rsp], rax
    21.         mov      rdx, QWORD PTR pointer$[rsp]
    22.         lea      rcx, OFFSET FLAT:$SG4882
    23.         call     printf
    24.         mov      rax, QWORD PTR pointer$[rsp]
    25.         mov      edx, DWORD PTR [rax]
    26.         lea      rcx, OFFSET FLAT:$SG4883
    27.         call     printf
    28.         mov      rax, QWORD PTR pointer$[rsp]
    29.         mov      QWORD PTR link$[rsp], rax
    30.         mov      rax, QWORD PTR link$[rsp]
    31.         mov      rdx, QWORD PTR [rax]
    32.         lea      rcx, OFFSET FLAT:$SG4884
    33.         call     printf
    34.         mov      rax, QWORD PTR link$[rsp]
    35.         mov      edx, DWORD PTR [rax]
    36.         lea      rcx, OFFSET FLAT:$SG4885
    37.         call     printf
    38.         xor      eax, eax
    39.         add      rsp, 64              ; 00000040H
    40.         pop      rdi
    41.         ret      0
    42. main    ENDP
    Ну что и требовалось доказать - одинаково

    Там в редакторе на сайте очень удобно смотреть какой кусок асм кода за какую конструкцию отвечает. Вот и сравните
     
    sniper и Fail нравится это.
  17. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    1.887
    Indy_,
    Ссылка - это тот же указатель, но гарантированно валидный (т.е. не NULL и не указывающий в неведомые е.беня).
     
  18. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.132
    Адрес:
    Russia
    Ну я бы так не надеялся )) выстрелить в ногу мы себе всегда сможем ))) (выделяем память, делаем ссылку, освобождаем память - Ы)
     
  19. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.623
    TermoSINteZ,

    Какая разница на каком яп собрали код. Есть указатель и релок для него. Указатель на это можно назвать ссылкой ?
    Для этого значение указателя должно быть загружено ?
     
    Последнее редактирование модератором: 6 авг 2017
  20. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.132
    Адрес:
    Russia
    Да, да

    А на счет яп - есть разница. Особенно если это Ява.