Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/56: Рейтинг темы: голосов - 56, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 24

Имя массива в С++ это указатель или ссылка?

12.06.2020, 14:18. Показов 13848. Ответов 133
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь понять что такое имя массива в С++! Указатель или ссылка? Сразу скажу что пока рассматриваю только статические массивы.
Теория говорит что это указатель, собственно поэтому для имени массива применима арифметика указателей.
Но! раз это указатель, то значит это переменная под которую компилятор выделил ячейку памяти в которой должен храниться адрес первого элемента массива arr[0]. Раз такая ячейка памяти есть то по идее можно узнать ее адрес так - &arr!
К сожалению такой трюк не работает и получается что &arr==arr! Для меня это никак не укладывается под описание указателя.

Попробовал выяснить по аналогии с простой переменной что такое указатель, а что такое ссылка!
Вот простенький код для простой переменной и результат его выполнения:
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        int a = 10;
    int* b = &a;
    int** c = &b;
    cout << "Указатели" << endl;
    cout << "ТИП" << "\t\t" << "int" << "\t" << "int*" << "\t\t" << "int*" << "\t\t" << "int" << "\t" << "int**" << "\t\t" << "int**" << "\t\t" << "int*" << "\t\t" << "int" << endl;
    cout << "ОПЕРАЦИЯ" << "\t" << "a" << "\t" << "&a" << "\t\t" << "b = &a" << "\t\t" << "*b" << "\t" << "&b" << "\t\t" << "c = &b" << "\t\t" << "*c" << "\t\t" << "**c" << endl;
    cout << "Значение" << "\t" << a << "\t" << &a << "\t" << b << "\t" << *b << "\t" << &b << "\t" << c << "\t" << *c << "\t" << **c << endl << endl;
 
    cout << "Ссылки" << endl;
    int& d = a;
    int* e = &d;
    cout << "ТИП" << "\t\t" << "int&" << "\t" << "\t" << "\t" << "int*" << "\t\t" << "int" << "\t" << "int*" << endl;
    cout << "ОПЕРАЦИЯ" << "\t" << "d" << "\t" << "&d" << "\t\t" << "e = &d" << "\t\t" << "*e" << "\t" << "&e" << endl;
    cout << "Значение" << "\t" << d << "\t" << &d << "\t" << e << "\t" << *e << "\t" << &e << endl;


Результат говорит о том что если переменная "b" - указатель на переменную "a", то переменная b находится в памяти по адресу &b и содержит значение адреса переменной a равное &a. Все вполне согласуется с теорией.
Если же переменная "d" - ссылка на переменную "a", то для переменной b вроде как не выделяется памяти, по крайней мере собственного адреса в памяти для переменной d нет и операция &d дает лишь адрес переменной a.

Если поступить аналогично с массивом?
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        const int size = 10;
    int arr[size] = {0,1,2,3,4,5,6,7,8,9};
    int* pArr = arr;
 
    void* a = &arr;         // студия ругается на cout << *a
    void** c = &a;          // студия ругается на cout << **с
    void* d = &a;           // студия ругается на cout << *d
 
    void* b = &pArr;
    void** e = &b;
    void* f = &b;
 
    cout << "arr + i" << "\t\t" << "arr[i]" << "\t" << "*(arr + i)" << "\t" << "&arr" << "\t\t" << "a = &arr" << "\t" << "&a" << "\t\t" << "c = &a" << "\t\t" << "d = &a" << "\t\t" << "*c" << endl;
    
    for (int i = 0; i < 10; i++)
    {
    cout << arr + i << "\t" << arr[i] << "\t" << *(arr + i) << "\t\t" << &arr << "\t" << a << "\t" << &a << "\t" << c << "\t" << d << "\t" << *c << endl;
    }
    
    cout << "pArr + i" << "\t" << "pArr[i]" << "\t" << "*(pArr + i)" << "\t" << "&pArr" << "\t\t" << "b = &pArr" << "\t" << "&b" << "\t\t" << "e = &b" << "\t\t" << "f = &b" << "\t\t" << "*e" << endl;
 
    for (int i = 0; i < 10; i++)
    {
    cout << pArr + i << "\t" << pArr[i] << "\t" << *(pArr + i) << "\t\t" << &pArr << "\t" << b << "\t" << &b << "\t" << e << "\t" << f << "\t" << *e << endl;
    }


Если объявить указатель pArr на массив arr, то видно что для pArr аналогично указателю простой переменной выделяется место в памяти с адресом &pArr в которой содержится адрес первого элемента массива arr[0]. Все как бы укладывается в мои представления.
А что же с именем массива? Ведь утверждается что это указатель на 1й элемент этого массива arr[0].
Операция &arr дает адресс такой же как и у первого элемента массива, как будто нет никакого указателя а есть ссылка по аналогии с обычной переменной!
Но почему же тогда для имени массива доступна арифметика указателя? для обычной ссылки такого ведь нет.
В последнем примере все указатели имеют тип void* (не знаю насколько это корректно), поэтому думаю что корректней следующий код, но результат тот же самый! Имя массива как будто является ссылкой а не указателем.
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
const int size = 10;
    int arr[size] = {0,1,2,3,4,5,6,7,8,9};
 
    int* pArr = arr;
 
    int(*a)[size] = &arr;
    int(**c)[size] = &a;
    
    int** b = &pArr;
    int*** e = &b;
    
    cout << "arr + i" << "\t\t" << "arr[i]" << "\t" << "*(arr + i)" << "\t" << "a = &arr" << "\t" << "*a" << "\t\t" << "c = &a" << "\t\t" << "*c" << "\t\t" << "**c" << endl;
    
    for (int i = 0; i < 10; i++)
    {
    cout << arr + i << "\t" << arr[i] << "\t" << *(arr + i) << "\t\t" << a << "\t" << *a << "\t" << c << "\t" << *c << "\t" << **c << endl;
    }
    
    cout << endl;
    cout << "pArr + i" << "\t" << "pArr[i]" << "\t" << "*(pArr + i)" << "\t" << "b = &pArr" << "\t" << "*b" << "\t\t" << "**b" << "\t\t" << "e = &b" << "\t\t" << "*e" << endl;
 
    for (int i = 0; i < 10; i++)
    {
        cout << pArr + i << "\t" << pArr[i] << "\t" << *(pArr + i) << "\t\t" << b << "\t" << *b << "\t" << **b << "\t\t" << e << "\t" << *e << "\t" << endl;
    }



У меня такое представление об указателях, что это переменная которая в памяти имеет собственное место т.е. имеет свой адрес и содержит адрес переменной на которую указывает. примерно как на следующем рисунке:


Все же объясните что такое имя массива? указатель или ссылка? или у меня неправильное представление об этих вещах?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.06.2020, 14:18
Ответы с готовыми решениями:

Указатель или ссылка на указатель. В чем разница?
Есть вопрос про указатели и ссылки на указатели :scratch: Хочу в функциях f1() и в f2() динамически выделить память и возвратить этот...

Указатель на константную строку и имя массива как указатель
Изучаю C. У меня есть указатель на константную строку, и я хочу его изменить путем передачи в функцию. Это работает без проблем: ...

Ссылка на объект в памяти и указатель это одно и тоже?
Разобрался со смыслом различий значимых типов и ссылочных типов, а так же с особенностями их передачи через ref и out. Но не понятно...

133
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
12.06.2020, 17:10
Студворк — интернет-сервис помощи студентам
cahmep, мне объясняли один раз про это так. Массив это массив, а не указатель. Имя массива интерпретируется как указатель на первый элемент массива.
Вот, может поможет понять:
0
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
12.06.2020, 17:20
Цитата Сообщение от Undisputed Посмотреть сообщение
An object of array type contains a contiguously allocated non-empty set of N subobjects of type T
Это значит только что
1. sizeof(A[N]) == sizeof(A) * N ¹
2. Имея указатель на i-й элемент массива и прибавив к нему n, получим указатель на i+n-й элемент массива (если 0 ≤ i+n ≤ N, где N — число элементов массива)
3. Если из двух указателей p1 и p2 первый указывает на i-й элемент, а другой на j-й элемент, то p1 < p2 если i < j. (На самом деле там правило посложнее, это частный случай).

И всё. То, что (void*)&array == (void*)&array[0] (ну или просто (void*)array справа) отсюда не следует. (void*)&array == (void*)&array[1] вполне может быть истинным по стандарту.

----

1) FIX: На самом деле нет, для sizeof отдельное правило.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.06.2020, 17:22
cahmep, вопрос который вы задали - хороший вопрос для человека, который пытается понять механизм работы вещей. Это делают не многие. У одних нет способности, у других нет потребности...
Имя массива и объект массива необычные звери. Я не знаю способа получить адрес массива. Даже объявляя ссылку на объект массива вы не сможете получить адрес массива. Попытка применения операции взятия адреса к ссылке на массив не заставят ссылку вернуть адрес массива из данной операции.
-Переменная массива сначала подставит первый элемент и из него будет взят адрес?
Спросите вы и будете правы. В этом случае если бы массив сразу отдал указатель, то взятие указателя на указатель привело бы к ошибке компиляции. Вы же приготовили бы указатель на массив a получили бы указатель на указатель, если бы объект массива сначала выполнил decay to pointer (спуск к указателю - магическое авто преобрахование) а потом оператор & захватил бы этот адрес.
На деле этого не происходит потому что array decay to pointer не работает в полном согласовании с логической механикой. Тут многие станут спорить, но я не буду.
Вывод: - просто запомните и всё.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
int main()
{
    int a[]={1,2,3};
    cout<<&a<<' '<<&a[0]<<endl;//ok 2 are equal
    typedef  int(&rTArray)[3] ;
    rTArray refa = a ;
    cout<<&refa<<' '<<&a[0]<<endl;//not ok 2 are equal and refa does not work as reference
 
    typedef  int(&pTArray)[3] ;
    pTArray pa = a ;
    cout<<&pa<<' '<<&a[0]<<endl;//not ok 2 are equal and pa does not work as pointer to array
return 0;
}
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
12.06.2020, 17:27
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я не знаю способа получить адрес массива.
C++
1
2
int a[]={1,2,3};
int (*p)[3] = &a;
C++
1
2
3
using T = int[3];
int a = {1,2,3};
T* p = &a;
Цитата Сообщение от IGPIGP Посмотреть сообщение
просто запомните и всё.
Может быть вам тоже стоит взглянуть на #18.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.06.2020, 17:30
Цитата Сообщение от DrOffset Посмотреть сообщение
int (*p)[3] = &a;
DrOffset, распечатайте и вы увидите что это адрес первого элемента.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
12.06.2020, 17:33
Цитата Сообщение от IGPIGP Посмотреть сообщение
распечатайте и вы увидите что это адрес первого элемента.
Ну и что? Посмотрите на #18, я распечатываю там &arr и вижу адрес a0. Почему это вообще должно удивлять, если layout этих переменных (arr и a0) совпадает?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.06.2020, 17:34
Цитата Сообщение от IGPIGP Посмотреть сообщение
DrOffset, распечатайте и вы увидите что это адрес первого элемента.
Хех... мой пост - в мусор. Ошибся и указатель скопировал как ссылку. Указатель и правда имеет свою переменную и адрес берётся нормально. Если честно, распечатывать адрес самого массива или как то с ним работать ещё - не помню когда приходилось. Но понаписывал я - зря.
0
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
12.06.2020, 17:35
IGPIGP, графомания ­— это не шутки.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.06.2020, 17:39
Цитата Сообщение от DrOffset Посмотреть сообщение
Почему это вообще должно удивлять, если layout этих переменных (arr и a0) совпадает?
Слава богу не совпадает. Я ошибся в коде где пытался протестить этот кейс. Там ссылка и вместо указателя по тайпдеф. Правилно вот так и адреса разные.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
int main()
{
    int a[]={1,2,3};
    cout<<&a<<' '<<&a[0]<<endl;//ok 2 are equal
    typedef  int(&rTArray)[3] ;
    rTArray refa = a ;
    cout<<&refa<<' '<<&a[0]<<endl;//not ok 2 are equal and refa does not work as reference
 
    typedef  int(*pTArray)[3] ;
    pTArray pa = &a ;
    cout<<&pa<<' '<<&a[0]<<endl;// ok 2 are not equal
return 0;
}


Добавлено через 2 минуты
Но логика очень странная. Ссылка не даёт адреса при взятии адреса своего объекта, а указатель, кстати - таки даёт указатель на первый элемент:
C++
1
2
3
typedef  int(*pTArray)[3] ;
    pTArray pa = &a ;
    cout<<pa<<' '<<&a[0]<<endl;//not ok 2 are equal and pa does not work as pointer to array
вот тут это видно.
0
0 / 0 / 0
Регистрация: 31.07.2014
Сообщений: 24
12.06.2020, 17:41  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Что удивительного, что &arr и arr дают один и тот же адрес? Объект arr содержит объект a0 первым и поэтому их адреса совпадают.
В случае в массивами вы видите те же самые закономерности.
в принципе понятно... arr адрес 0-го элемента, &arr адрес всего массива (адрес цельного объекта из N элементов)
собственно и из смежной моей темы ясно почему себя ведет так выражение "&arr +i"

путает только то что имя массива называют указателем хотя оно таким не является как выясняется (по крайней мере для статического массива). однако же с именем можно оперировать как будто это указатель.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.06.2020, 17:43
Цитата Сообщение от IGPIGP Посмотреть сообщение
Хех... мой пост - в мусор.
Не совсем выходит всё там плохо.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
12.06.2020, 17:45
Цитата Сообщение от IGPIGP Посмотреть сообщение
адреса разные.
Имеется виду последний случай с указателем? Ну так они и должны быть разные. Не понятно только чем массивы тут уникальные, все делается точно так же, как в случае других объектов.

Добавлено через 32 секунды
Цитата Сообщение от IGPIGP Посмотреть сообщение
Ссылка не даёт адреса при взятии адреса своего объекта
Потому что ссылка - это не объект.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.06.2020, 17:46
Цитата Сообщение от argcargv Посмотреть сообщение
IGPIGP, графомания ­— это не шутки.
Да тут не в гравомании дело. Можете ради интереса проити по моему профилю. За последнюю неделю 1-2 поста. Тема таки интересная.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
12.06.2020, 17:47
Цитата Сообщение от cahmep Посмотреть сообщение
путает только то что имя массива называют указателем хотя оно таким не является как выясняется (по крайней мере для статического массива). однако же с именем можно оперировать как будто это указатель.
Ну куда деваться, сказывается обилие людей с малыми знаниями, но большим желанием учить других.

Цитата Сообщение от cahmep Посмотреть сообщение
однако же с именем можно оперировать как будто это указатель.
Если говорить чуть строже, то оперируете вы с временным объектом типа "указатель", который появляется в результате неявного преобразования array-to-pointer.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.06.2020, 17:48
Цитата Сообщение от DrOffset Посмотреть сообщение
Потому что ссылка - это не объект.
DrOffset, еще раз:
Цитата Сообщение от IGPIGP Посмотреть сообщение
Ссылка не даёт адреса при взятии адреса своего объекта
То есть речь не о своём адресе, а о адресе объекта который есть у любой ссылки (целевого).
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
12.06.2020, 17:51
Цитата Сообщение от cahmep Посмотреть сообщение
(по крайней мере для статического массива)
Для массива в динамической памяти - тоже не является. У массива в динамической памяти вообще нет имени, а тот указатель, который вы получаете - можно рассматривать как результат преобразования array-to-pointer этого безымянного массива.
Так что никакие правила не нарушаются, просто чуть другая ситуация.

Добавлено через 1 минуту
Цитата Сообщение от IGPIGP Посмотреть сообщение
То есть речь не о своём адресе, а о адресе объекта который есть у любой ссылки (целевого).
Конечно дает.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
12.06.2020, 17:52
Цитата Сообщение от argcargv Посмотреть сообщение
3. Если из двух указателей p1 и p2 первый указывает на i-й элемент, а другой на j-й элемент, то p1 < p2 если i < j.
разве это не означает что адрес самого крайнего левого элемента будет всегда меньше чем адрес элемента который правее от него?
то есть адрес arr[0] (он же первый элемент) всегда меньше чем адрес arr[1].

и если &arr нам возвращает самый первый байт массива (а он - будет меньше всех адресов которые правее него) значит адрес этого первого байта меньше остальных и это и есть адрес первого элемента (это исходя п.3 из вашего сообщения)
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
12.06.2020, 17:55
Цитата Сообщение от IGPIGP Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
int main()
{
    int a[]={1,2,3};
    cout<<&a<<' '<<&a[0]<<endl;//ok 2 are equal
    
    typedef  int(&rTArray)[3] ;
    rTArray refa = a ;
    cout<<&refa<<' '<<&a[0]<<endl;//not ok 2 are equal and refa does not work as reference
Первая ситуация и вторая ситуация - это одно и тоже. Ссылка refa - псевдоним a.
Почему первая ситуация у вас "ok", а вторая "not ok" - не ясно.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13233 / 6865 / 1827
Регистрация: 18.10.2014
Сообщений: 17,398
12.06.2020, 17:55
Цитата Сообщение от cahmep Посмотреть сообщение
Имя массива в С++ это указатель или ссылка?
1. Имя массива, как вам уже сказали, это не указатель и не ссылка. Это имя массива. Это идентификатор объекта типа "массив". После

C++
1
int arr[10];
имя arr - это идентификатор объекта типа int [10]. Никаких указателей или ссылок тут нет и в помине.

2. Имя массива, как и любой идентификатор, может использоваться в выражениях. Выражение, состоящее из имени массива, является lvalue и имеет тип "массив". Выражение arr (или (arr), если хотите) - это lvalue с типом int [10]. Опять же, никаких указателей или ссылок тут нет и в помине.

3. Когда выражение типа "массив", используется в ряде специально оговоренных контекстов, значение этого выражения автоматически (неявно) преобразуется к типу "указатель". Результат преобразования - это временное значение, rvalue, которое указывает на первый (нулевой) элемент массива. Именно поэтому вы можете, например, написать int *p = arr; или arr + 5.

А, например, в контексте sizeof arr такого преобразования не делается, по каковой причине sizeof применяется к исходному объекту типа "массив" и вы получаете размер массива, а не размер указателя.

4. Вы сделали странное утверждение, что если результат этого преобразования является указателем, значит этот указатель "должен где-то храниться". Это - бессмысленное утверждение. С чего бы это вдруг? Нигде он не хранится и не должен храниться. Например, точно таким же образом мы можем неявно преобразовать переменную типа double к типу int

C++
1
2
double d = 3.14;
int i = d;
Переменная i получит значение 3, что однако совсем не означает, что это значение 3 типа int где-то до этого "хранилось". Значение 3 в данном случае возникает на лету "из водзуха", в процессе округления исходного значения d. Ситуация с массивами полностью аналогична.

5. Причины такого поведения массивов в языке С (и, соответственно, в С++) детально описаны в статье Дениса Ритчи об эволюции языка С.
2
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
12.06.2020, 17:55
сообщение выше отредактировано. были опечатки
Цитата Сообщение от Undisputed Посмотреть сообщение
и если &arr нам возвращает самый первый байт массива
имелось ввиду адрес самого первого байта массива...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.06.2020, 17:55

как такое правильно писать? это ссылка на указатель?
#include &lt;iostream&gt; using namespace std; char *chch2 = &quot;hello&quot;; char*&amp; f() { char *&amp;chch3 = chch2; return...

Что лучше ссылка или указатель?
Что лучше - ссылка или указатель?

Не удалось найти имя типа или пространства имен пропущена директива using или ссылка на сборку
Доброе время суток.Есть код: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace...

Как ускорить работу. Ссылка или указатель
У меня следующая ситуация. Обработка изображений с EMGUCV. Объект Image весит очень много. Этот объект надо передавать в мой класс. ...

Имя массива как указатель
Используя имя массива как указатель, и применяя адресную арифметику выполнить задание (каждое задание оформить отдельной функцией). Дан...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru