История изменений
Исправление hateyoufeel, (текущая версия) :
вместо T* ptr, пишешь T& ref. это в с++. в си ссылок нет вроде, но могли бы ввести.
Ссылки в C++ возможно использовать далеко не во всех вариантах. Для выделения памяти, например, нельзя.
указатель нужен для адресных вычислений в основном. кто программировал на асме, тот поймет, зачем он.
Ты, похоже, сам не понимаешь, зачем он. Вычисление адресов на асме и указатели в Си – разные вещи. Например, в Си ты не можешь просто взять и вычесть два указателя друг из друга, потому что это может быть UB. Хуже того, у тебя по адресу (void*)0
может быть замаплена страница, никто этому не мешает в принципе, но из-за сишной шизофрении ты не можешь туда обратиться. То есть, можешь, конечно, но компилятор стопудов напихает тебе говна в код. Но вот такое будет работать:
$ sysctl vm.mmap_min_addr=0
#include <sys/mman.h>
#include <stdio.h>
#include <string.h>
int main(void) {
char *addr = mmap(NULL, 6, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED|MAP_ANONYMOUS, -1, 0);
if (addr == MAP_FAILED) {
perror("mmap");
return 1;
}
strcpy(addr, "abcxyz");
printf("Mapped into addr=0x%X\n", addr);
printf("%s\n", addr);
printf("%s\n", NULL);
}
Исправление hateyoufeel, :
вместо T* ptr, пишешь T& ref. это в с++. в си ссылок нет вроде, но могли бы ввести.
Ссылки в C++ возможно использовать далеко не во всех вариантах. Для выделения памяти, например, нельзя.
указатель нужен для адресных вычислений в основном. кто программировал на асме, тот поймет, зачем он.
Ты, похоже, сам не понимаешь, зачем он. Вычисление адресов на асме и указатели в Си – разные вещи. Например, в Си ты не можешь просто взять и вычесть два указателя друг из друга, потому что это может быть UB. Хуже того, у тебя по адресу (void*)0
может быть замаплена страница, никто этому не мешает в принципе, но из-за сишной шизофрении ты не можешь туда обратиться. То есть, можешь, конечно, но компилятор стопудов напихает тебе говна в код. Но вот такое будет работать:
sysctl vm.mmap_min_addr=0
#include <sys/mman.h>
#include <stdio.h>
#include <string.h>
int main(void) {
char *addr = mmap(NULL, 6, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED|MAP_ANONYMOUS, -1, 0);
if (addr == MAP_FAILED) {
perror("mmap");
return 1;
}
strcpy(addr, "abcxyz");
printf("Mapped into addr=0x%X\n", addr);
printf("%s\n", addr);
printf("%s\n", NULL);
}
Исправление hateyoufeel, :
вместо T* ptr, пишешь T& ref. это в с++. в си ссылок нет вроде, но могли бы ввести.
Ссылки в C++ возможно использовать далеко не во всех вариантах. Для выделения памяти, например, нельзя.
указатель нужен для адресных вычислений в основном. кто программировал на асме, тот поймет, зачем он.
Ты, похоже, сам не понимаешь, зачем он. Вычисление адресов на асме и указатели в Си – разные вещи. Например, в Си ты не можешь просто взять и вычесть два указателя друг из друга, потому что это может быть UB. Хуже того, у тебя по адресу (void*)0
может быть замаплена страница, никто этому не мешает в принципе, но из-за сишной шизофрении ты не можешь туда обратиться.
Исходная версия hateyoufeel, :
вместо T* ptr, пишешь T& ref. это в с++. в си ссылок нет вроде, но могли бы ввести.
Ссылки в C++ возможно использовать далеко не во всех вариантах. Для выделения памяти, например, нельзя.
указатель нужен для адресных вычислений в основном. кто программировал на асме, тот поймет, зачем он.
Ты, похоже, не понимаешь, зачем он. Вычисление адресов на асме и указатели в Си – разные вещи. Например, в Си ты не можешь просто взять и вычесть два указателя друг из друга, потому что это может быть UB. Хуже того, у тебя по адресу (void*)0
может быть замаплена страница, никто этому не мешает в принципе, но из-за сишной шизофрении ты не можешь туда обратиться.