Size: a a a

Compiler Development

2021 January 25

БГ

Бензофуран Гетероцик... in Compiler Development
func()[5] = ... это какая-то муть, чисто на первый взгляд))
источник

AK

Andrei Kurosh in Compiler Development
Бензофуран Гетероцикл
func()[5] = ... это какая-то муть, чисто на первый взгляд))
почему, вполне валидное выражение
источник

JT

James Tevision in Compiler Development
Только для С вроде.....
Ибо должен возвращатся УКАЗАТЕЛЬ на массив
Иначе весь возврашенный массив уйдет в молоко
источник

БГ

Бензофуран Гетероцик... in Compiler Development
Andrei Kurosh
почему, вполне валидное выражение
Выражение-то валидное, но я не вижу большой пользы в реализации такой штуки
источник

AK

Andrei Kurosh in Compiler Development
Бензофуран Гетероцикл
Выражение-то валидное, но я не вижу большой пользы в реализации такой штуки
func выбирает один из нескольких массивов, в которые могут сохраняться данные
источник

БГ

Бензофуран Гетероцик... in Compiler Development
Andrei Kurosh
func выбирает один из нескольких массивов, в которые могут сохраняться данные
🤔🤔🤔
Справедливо
источник

D

Danya in Compiler Development
Alexander Tchitchigin
Значит, как минимум, не как в C, где массивов нет вообще, а есть только указатели.
Как это нет массивов?
источник

а

а это кто in Compiler Development
James Tevision
ASSIGN -> IDENT := EXPR
|   IDENT [ EXPR ] := EXPR

Но вопрос: что делать если массив возврашен функцией?
А что не так с массивом возвращённым функцией?
источник

а

а это кто in Compiler Development
Danya
Как это нет массивов?
видимо если массив нельзя передать в функцию и нельзя вернуть из функции значит их нету или что-то такое, хз
источник

K

Kir in Compiler Development
Danya
Как это нет массивов?
А вот так. int[] - это указатель. Можно по значению передавать как int[20] например
источник

D

Danya in Compiler Development
int arr[20];
Тут например нет указателя
источник

K

Kir in Compiler Development
void foo(int arr[]);
void bar(int arr[20]);

int arr[20] = {0};
foo(arr); -- по ссылке
bar(arr); -- по значению


Но сторого говоря, лучше в С считать массивы указателями. Даже выделенные в стеке.
источник

LA

Liber Azerate in Compiler Development
Kir
void foo(int arr[]);
void bar(int arr[20]);

int arr[20] = {0};
foo(arr); -- по ссылке
bar(arr); -- по значению


Но сторого говоря, лучше в С считать массивы указателями. Даже выделенные в стеке.
В целом, вторая функция тоже будет с указателем
источник

K

Kir in Compiler Development
Liber Azerate
В целом, вторая функция тоже будет с указателем
Во вторую массив вроде будет скопирован
источник

а

а это кто in Compiler Development
Kir
Во вторую массив вроде будет скопирован
Нет
источник

а

а это кто in Compiler Development
void foo(int arr[]);
void bar(int arr[20]);

обе функции принимают на вход указатель на массив, массив не копируется
источник

LA

Liber Azerate in Compiler Development
а это кто
void foo(int arr[]);
void bar(int arr[20]);

обе функции принимают на вход указатель на массив, массив не копируется
+
источник

K

Kir in Compiler Development
а это кто
void foo(int arr[]);
void bar(int arr[20]);

обе функции принимают на вход указатель на массив, массив не копируется
#include <stdio.h>

int arr[20] = {0};

void foo(int arr[]) {
 arr[3] += 1;
}

void bar(int arr[20]) {
 arr[4] += 1;
}

int main() {
 arr[2] += 1;
 foo(arr);
 bar(arr);
 printf("%d, %d, %d\n", arr[2], arr[3], arr[4]);
 return 0;
}

1, 1, 1

Да, действительно
источник

JT

James Tevision in Compiler Development
а это кто
А что не так с массивом возвращённым функцией?
Он может быть как слева так и справа от :=
Но мне уже подсказали сделать
Его лвалью
А лвалью - часть рвалью
источник

JT

James Tevision in Compiler Development
А есть где-то грамматика С
Чтобы почитать, и попытаться осознать
источник