- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[4] = {1, 2, 3, 4};
int (*a_p1)[4] = (int (*)[4])a;
int (*a_p2)[4] = &a;
for(size_t i = 0; i < 4; ++i)
{
printf("%p -> %d; %p -> %d\n", &(*a_p1)[i], (*a_p1)[i], &(*a_p1)[i], (*a_p2)[i]);
}
return EXIT_SUCCESS;
}
j123123 14.01.2022 20:23 # 0
printf("%p -> %d; %p -> %d\n", &(*a_p1)[i], (*a_p1)[i], &(*a_p2)[i], (*a_p2)[i]);
Как думаете, почему
int (*a_p1)[4] = (int (*)[4])a;
и
int (*a_p2)[4] = &a;
означают одну и ту же хуйню? Или есть какая-то разница?
ASD_77 14.01.2022 20:26 # 0
j123123 14.01.2022 20:27 # 0
https://wandbox.org/permlink/Bi3wM2Jl2ZmhXzEZ
Floating_cockerel 14.01.2022 20:58 # +1
Это охуенно
ASD_77 15.01.2022 02:13 # +1
guest6 15.01.2022 02:22 # 0
ObeseYoung 15.01.2022 07:11 # 0
Rooster 15.01.2022 08:00 # 0
3oJIoTou_xyu 15.01.2022 09:25 # +3
ObeseYoung 15.01.2022 16:36 # +1
https://i.postimg.cc/W1skKn3Z/WS.webp
HoBorogHuu_nemyx 15.01.2022 10:49 # 0
ISO 14.01.2022 20:37 # 0
Floating_cockerel 14.01.2022 20:57 # +1
&a — указывает на сам массив (int(*)[4])
(int (*)[4])a — у a и &a значения одинаковые, но разные типы, приводим, получается однохуственно
Верно?
bormand 14.01.2022 21:07 # +1
HoBorogHuu_nemyx 14.01.2022 21:25 # +1
Floating_cockerel 14.01.2022 21:46 # 0
j123123 14.01.2022 21:07 # +2
Так точно: (0x7fffc4da4ea0 == 0x7fffc4da4ea0) is true
HoBorogHuu_nemyx 14.01.2022 21:23 # +1
*a и a[0] означает одно и то же: первый элемент массива (хотя есть нюанс с sizeof в зависимости от места хранения).
a и &a означают одно и то же, если a — массив.
Но если тот же самый массив завернуть в структуру...
j123123 14.01.2022 21:33 # 0
Только для глобальных и статических локальных массивов нужно еще какое-то особое говно, типа компилтайм-аллокации
Floating_cockerel 14.01.2022 21:35 # 0
j123123 14.01.2022 21:51 # 0
Так что во всех случаях тупо заменить локальные массивы alloca()-хуйней не выйдет. В каком-нибудь цикле это alloca() может весь стек выжрать запросто
bormand 14.01.2022 21:53 # 0
j123123 14.01.2022 21:58 # 0
Steve_Brown 16.01.2022 14:08 # 0
Floating_cockerel 14.01.2022 21:59 # 0
Floating_cockerel 14.01.2022 21:39 # +1
Steve_Brown 16.01.2022 14:05 # 0
Floating_cockerel 16.01.2022 20:47 # +1
Fike 16.01.2022 20:57 # +2
ObeseYoung 17.01.2022 14:24 # +1
j123123 26.01.2022 05:35 # +1
Можно такой указатель кастовать в двойной указатель на void и разыменовывать бесконечное количество раз.
Rooster 26.01.2022 07:34 # +2
Это уже будет адрес ячейки памяти. А адрес — это именно само значение, у него не может быть адреса, так же как и у, например, числа 42. Ты же не можешь написать &42
HoBorogHuu_nemyx 26.01.2022 08:02 # +2
bormand 26.01.2022 08:24 # +2
guest6 26.01.2022 10:57 # 0
Rooster 26.01.2022 11:12 # +2
HoBorogHuu_nemyx 26.01.2022 11:27 # +1
Хочу так:
И пусть компилятор (рантайм) перемещает переменную, как хочет.
Rooster 26.01.2022 12:19 # +1
Это в смысле мы скопировали петуха в some_address, и потёрли оригинала?
Soul_re@ver 26.01.2022 12:23 # 0
Rooster 26.01.2022 12:27 # 0
Rooster 26.01.2022 12:44 # +1
Rooster 26.01.2022 12:47 # +1
HoBorogHuu_nemyx 26.01.2022 17:24 # 0
HoBorogHuu_nemyx 26.01.2022 17:26 # 0
guest6 26.01.2022 17:39 # 0
ObeseYoung 26.01.2022 13:07 # 0
https://i.postimg.cc/2843vf1y/7-5.jpg
HoBorogHuu_nemyx 26.01.2022 15:39 # 0
А в языке «METAFONT» Кнута есть присвоения (:=, как в Паскале) и уравнения. Уравнения пытаются найти значения тех переменных, которые в данный момент undefined. Например:
Этот код найдёт значение pituh, потому что значение kurochka уже известно.
Soul_re@ver 26.01.2022 16:12 # 0
Вот! То что я и имел в виду под «пусть компилятор разбирается». Сразу видно — ма-те-ма-тик писал, а не случайный питух.
HoBorogHuu_nemyx 26.01.2022 16:22 # 0
Теперь x и y — связанные переменные. Если присвоить значение x, он посчитает y.
Если же написать новое уравнение, в котором указаны обе переменные, то он их обе посчитает:
Системы линейных уравнений он точно решать умеет. Про нелинейные не знаю.
j123123 26.01.2022 16:38 # +1
Тут вполне достаточно и одних лишь уравнений. К тому же это все отлично решается в SMT-солверах, например тут https://compsys-tools.ens-lyon.fr/z3/index.php
результат:
j123123 26.01.2022 16:46 # 0
HoBorogHuu_nemyx 26.01.2022 17:01 # 0
Кроме того, бывают сложные случаи типа x = y. Тут нужно выяснять, какая из переменных undefined, какая связанная, какая известна. А если написать x:=y, то состояние x можно проигнорировать и пытаться вычислить y в любом случае.
В чисто декларативных ЯП таких ситуаций не возникает.
j123123 26.01.2022 17:19 # +1
3.14159265 27.01.2022 00:16 # +1
Лолбоёбы уже смешали имперации с функци-анальщиной.
Что получили в итоге? Неочевидные правила захвата пельменных (хорошо только в «PHP»), просто говняные отвратно выглядящие языки (привет Scala-хуесосам).
Проблема вылезла в куче недоязычков от С# до JS.
let её никак не решает.
Если где-то проебал var/let пельменная может приехать из внешнего конь-текста.
А всё поцчему?
Вместо того чтобы писать и циклы в едином функциональном стиле c колобками
array.forEach((x)=>...)
Устроили смешивание образов императивного и функционального.
3.14159265 27.01.2022 00:23 # +1
Сначала жертву учат писать императивно. Говорят, что императивный стиль — это хорошо, потому что идеально ложится на железо.
Затем жертву убеждают что использование объектно-ориентированного подхода позволяет сократить стоимость разработки на 12.6% по сравнению с устаревшим процедурным подходом.
Затем жертве говорят, что ООП это уже не модно и нужно использовать функциональный стиль.
Зомбирующий говорит: «Имперации! Функциклонги!»
Ассистенты зомбирующего повторяют: «Декларативность! ООП!»
Таким образом обеспечивается усиление смешивания парадигм.
Затем моду меняют.
Основной смысл - оглупление. Бывают случаи очень сильного падения уровня интеллекта в результате применения этой методики.
3.14159265 27.01.2022 00:01 # +1
> 42 = pituh;
3.14159265 27.01.2022 00:04 # +2
HoBorogHuu_nemyx 27.01.2022 00:11 # +2
3.14159265 27.01.2022 00:33 # 0
Dubbed Trojan Source, the attack impacts many of the compilers, interpreters, code editors, and code repository frontend services used by software developers. Malicious actors could leverage the method to create code that would be displayed one way in code editors, but be interpreted differently by the compiler.
C, C++, C#, JavaScript, Java, Rust, Go, and Python have been found to be impacted, as well as VS Code, Atom, SublimeText, Notepad, vim, emacs, GitHub and BitBucket.
Соснули все.
Вот именно поэтому я за «ed».
https://govnokod.ru/26423#comment527017
HoBorogHuu_nemyx 27.01.2022 00:53 # 0
3.14159265 27.01.2022 00:46 # 0
https://ideone.com/dGF2bH
3.14159265 27.01.2022 00:52 # +1
Оба показывают нормально (просто игнорят уникод).
more тоже хорош
А обожаемый мною less идеален:
А вот сцинтильная заедушатина сливает, да.
HoBorogHuu_nemyx 27.01.2022 00:54 # 0
3.14159265 27.01.2022 01:09 # 0
3.14159265 27.01.2022 01:20 # +1
Опровергаю. И без них можно обосраться:
HoBorogHuu_nemyx 27.01.2022 05:44 # 0
Это не отменяет того, что существуют другие способы обосраться.
j123123 27.01.2022 05:41 # +2
Мина замедленного действия это такая мина, на которую допустим случайно наступил, проходя мимо, а она только через час взорвется?
HoBorogHuu_nemyx 27.01.2022 05:47 # 0
HoBorogHuu_nemyx 27.01.2022 05:52 # 0
Поэтому ненужный код лучше прятать в #ifdef, а не в комментарии.
3.14159265 27.01.2022 00:57 # 0
HoBorogHuu_nemyx 27.01.2022 01:00 # +1
HoBorogHuu_nemyx 27.01.2022 01:05 # +1
guest6 27.01.2022 01:10 # 0
HoBorogHuu_nemyx 27.01.2022 04:09 # +1
j123123 27.01.2022 05:39 # +1
Программисту достаточно говноскриптом пройтись по всем исходникам и выпилить нахер всю эту питушню с отзеркаливанием текста. Можно в компилятор даже встроить какую-то хуйню, чтоб он варнинг писал на такое.
HoBorogHuu_nemyx 27.01.2022 05:41 # 0
Rooster 27.01.2022 05:43 # 0
Rooster 27.01.2022 05:49 # 0
Soul_re@ver 27.01.2022 07:41 # +1
А нахуя она в строковых литералах? Если у тебя RTL и прочая питушня в строке, то это скорее всего должно хранится внешне в ресурсах, чтобы не пересобирать проект каждый раз, когда потребуется поправить правописание. Ну и чтобы переводчики могли независимо от программистов работать.
А если это внутренние строки для логирования и прочей питушни, то только ASCII, только хардкор.
ObeseYoung 27.01.2022 06:04 # 0
bormand 27.01.2022 07:15 # 0
guest6 14.01.2022 21:43 # 0
> указывает на сам массив
в сишке это одно и тоже: указатель на первый элемент равен указателю на сам массив
имено потому массивы с ноля
bormand 14.01.2022 21:45 # 0
Floating_cockerel 14.01.2022 21:49 # 0
Попробуй джага-джага
guest6 14.01.2022 21:50 # 0
я имел ввиду что в данном случае нет разницы, а между
petuh* a;
и
petuh a[22]
конечяно е
Floating_cockerel 14.01.2022 21:48 # 0
guest6 14.01.2022 21:50 # 0
как я могу массив в указатель скопировать?
bormand 14.01.2022 21:51 # 0
guest6 14.01.2022 21:54 # 0
я думал, компилятор когда справа массив видит, сразу нахуй посылает, если ты явно не кастанул
bormand 14.01.2022 21:55 # 0
guest6 14.01.2022 22:04 # +1
А про массив заходящий я знаю.
Ебадад потом делает ему sizeof() и итерируется, и всё работает годами, потому что размер массива оказался развен размеру указателя
bormand 14.01.2022 22:10 # 0
guest6 14.01.2022 22:14 # 0
Кстати, это забавный момент, когда "&a" равно "a"
bormand 14.01.2022 22:25 # 0
Буква L в названии языка C означает Logic.
Floating_cockerel 14.01.2022 21:53 # +1
С помошью мемсру если моссив маленький или указатель достаточно разработан.
guest6 14.01.2022 21:37 # 0
в данном случае нет разницы указатель на инт или указатель на массив интов, если ты ождиаешь четыре инта
Floating_cockerel 14.01.2022 21:48 # 0
guest6 14.01.2022 21:51 # 0
как я могу массив в указатель скопировать?
guest6 14.01.2022 21:51 # +1
Попробуй джага-джага
guest6 27.01.2022 02:08 # 0
HoBorogHuu_nemyx 27.01.2022 04:08 # 0
guest6 27.01.2022 14:44 # 0