powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / int &i; что можно делат с такой переменной?
45 сообщений из 45, показаны все 2 страниц
int &i; что можно делат с такой переменной?
    #34673118
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
int &i; что можно делат с такой переменной? что она вообще из себя представляет? можно ли ей присвоить значение?
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673166
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то должен быть как минимум warning. Сделпть с таким уже нничего нельзя. инициализировать надо было при декларации
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673343
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не переменная :). Это ссылка на переменную. Почти, то же самое, что int *i, но имеющее вагон и маленькую тележку отличий в использовании.
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673401
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
действительно, поспешил, так не работает, пока получилось так:

int &i = *(int *)2;

printf("\ni = %u", &i);

можете сказать что за отличия от int * ?
но это конечно излишний изврать, а бывают ли для нее достойные применения?
это не тоже самое, при передачу параметра в функцию по ссылке? если тоже самое, то почему в теле функции я использую ее как обычную переменную, а так приходится добавлять &
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673452
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik пишет:
> int &i;

Должно быть
int &i = xxx;

Инициализация ссылки обязательна.

что можно делат с такой переменной?
Все то же, что и с int xxx;

что она вообще из себя представляет?
Разименованный указатель на xxx.
Гарантированно указывающий на какое-то значение.

можно ли ей присвоить значение?

Да

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673455
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded пишет:

> Вообще-то должен быть как минимум warning. Сделпть с таким уже нничего

error.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673456
Фотография tAZAR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik а так приходится добавлять &
А зачем приходится? То, что вы написали:
int &i = *(int *)2;
ужос :-)
Вы берете адрес от i, и в него кладете
Взятие адреса нужно при передачи параметра по ссылке, или для взятия адреса :-) Масо масляное на первый взгляд.
Этим вы говорите, что значение переменной i находится начиная 0x2. Зачем?
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673472
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tAZAR Tubrik а так приходится добавлять &
А зачем приходится? То, что вы написали:
int &i = *(int *)2;
ужос :-)
Вы берете адрес от i, и в него кладете
Взятие адреса нужно при передачи параметра по ссылке, или для взятия адреса :-) Масо масляное на первый взгляд.
Этим вы говорите, что значение переменной i находится начиная 0x2. Зачем?

покажите как правильно
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673485
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrikдействительно, поспешил, так не работает, пока получилось так:

int &i = *(int *)2;

Мля-я-я Это сильно. Ну и какойже int у нас по адресу 2

printf("\ni = %u", &i);
Tubrik
можете сказать что за отличия от int * ?
но это конечно излишний изврать, а бывают ли для нее достойные применения?
это не тоже самое, при передачу параметра в функцию по ссылке? если тоже самое, то почему в теле функции я использую ее как обычную переменную, а так приходится добавлять &
1) не надо звездочку писать чтобы к int обратитсься
2) присвоить ссылке новое значение НЕЛЬЗЯ!!!
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673501
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrikдействительно, поспешил, так не работает, пока получилось так:

int &i = *(int *)2;

printf("\ni = %u", &i);

можете сказать что за отличия от int * ?
но это конечно излишний изврать, а бывают ли для нее достойные применения?
это не тоже самое, при передачу параметра в функцию по ссылке? если тоже самое, то почему в теле функции я использую ее как обычную переменную, а так приходится добавлять &

Гениальный код. И какой в этом смысл?

ссылка на объект предназначена для того чтобы, хранить адрес объекта, и при обращении к нему, обращаться к настоящему объекту. Т.е. по сути, обычный указатель. Но я нигде не встречал внятного описания, что такое ссылка. Потому, что описать, наверное, очень сложно.

Ссылка иммитирует обращение к обычному классу, т.е. вы не пишете -> для доступа к методу, а пишете ".". Так же не надо разыменовывать ее, для получения доступа к значению. Но ссылку всегда необходимо инициализировать, как отметил blinded, она не может принимать значения NULL. Хотя, компилятор и скажет вам Варнинг, но мы не сможем потом узнать, инициализированна она или нет. Ну, еще у нее куча особенностей, допустим передача значений по ссылке, параметры "Type const&", и т.д.

Почему в теле функции вы ее используете обычным образом, уже думаю, понятно. Ну, а в парметрах пишете & для того, чтобы компилятор не создовал копию передаваемого значения в стеке, а передал значение "по ссылке". Т.е. фактически, указатель, если не сможет оптимизировать.
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673552
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh

Гениальный код. И какой в этом смысл?



никакого, я просто пытался как-нибудь скомпилить и так получилось)

я так и не понял как присвоить какое-нидь значение, т.е. проинициализировать скажем числом 5
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673609
Фотография tAZAR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
int i = 5; ???
Или вы хотите сослаться на определенный адрес в памяти?
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673635
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik Akh

Гениальный код. И какой в этом смысл?



никакого, я просто пытался как-нибудь скомпилить и так получилось)

я так и не понял как присвоить какое-нидь значение, т.е. проинициализировать скажем числом 5

Код: plaintext
1.
2.
3.
4.
int const i5 =  5 ;

int &i=i5;

...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673642
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, и ссылка, есно, константная.
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673647
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никакой конкретной задачи, просто стало интересно узнать, можно ли переменной объявленной как int &i = ... присвоить значение, например целого числа, если да, то как это сделать? я где-то видел такое, но забыл. еще интересно, есть ли полезное использование таких объявлений, помимо изврата?
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673692
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrikникакой конкретной задачи, просто стало интересно узнать, можно ли переменной объявленной как int &i = ... присвоить значение, например целого числа, если да, то как это сделать? я где-то видел такое, но забыл. еще интересно, есть ли полезное использование таких объявлений, помимо изврата?

Скорее что-то перепутал.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class A {
   private:
       int a[ 1000 ][ 200 ];
       double b[ 100000 ];
}:

void func(A &a)  {
};


Если в функции не использовать передачи по ссылке, то в стек будет забубенено много-много килобайт или мегобайт.

Код: plaintext
1.
2.
3.
func(int &i) {
   i= 5 ;
};

Если использовать ссылку, то по возвращению из функции ваши данные изменяться

Код: plaintext
1.
2.
3.
i= 3 ;
func(i);
//i == 5;
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673702
Фотография tAZAR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrikпомимо изврата?
В красной книге, возможно, есть такие экземпляры :-)
Тут дело в том, что вы пытаетесь сказать, что &i = 2 - это адрес переменной i в памяти = 2.
Кто вам даст потом безнаказанно писать в память, которую вы не выделяли?
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673708
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh

Код: plaintext
1.
2.
3.
4.
int const i5 =  5 ;

int &i=i5;



i:\test2007\hui2\hui2.cpp(94): error C2440: 'initializing' : cannot convert from 'const int' to 'int &'
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673711
Фотография tAZAR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или вот такой короткий пример использования &:

#include <QApplication>
#include <QFont>
#include "ui_hello.h"
using namespace Ui;

QDialog *widg;

int Run(QApplication *app);

int main(int argc, char* argv[])
{
QApplication app(argc, argv);
int res = Run(&app);
delete widg;
return res;
}

int Run(QApplication *app)
{
widg = new QDialog();
Dialog dlg;
dlg.setupUi(widg);

widg->showFullScreen();
return app->exec();
}


[SRC c++][/SRC]
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673715
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik Akh

Код: plaintext
1.
2.
3.
4.
int const i5 =  5 ;

int &i=i5;



i:\test2007\hui2\hui2.cpp(94): error C2440: 'initializing' : cannot convert from 'const int' to 'int &'

Я же сразу исправился.

Код: plaintext
1.
2.
3.
int const i5 =  5 ;

int const &i=i5;
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673718
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tAZARИли вот такой короткий пример использования &:

#include <QApplication>
#include <QFont>
#include "ui_hello.h"
using namespace Ui;

QDialog *widg;

int Run(QApplication *app);

int main(int argc, char* argv[])
{
QApplication app(argc, argv);
int res = Run(&app);
delete widg;
return res;
}

int Run(QApplication *app)
{
widg = new QDialog();
Dialog dlg;
dlg.setupUi(widg);

widg->showFullScreen();
return app->exec();
}


[SRC c++][/SRC]

кажется это не совсем то, вы возможно хотели привести пример типа int Run(QApplication &app), а так получается взятие адреса..
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673725
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tAZARИли вот такой короткий пример использования &:

И где тут ссылки на объекты?
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673729
Фотография tAZAR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik
кажется это не совсем то, вы возможно хотели привести пример типа int Run(QApplication &app), а так получается взятие адреса..
Да, простите, ошибся :-)
Но для сведения тоже пойдет:-)
Вот то, о чем говорили:
Код: plaintext
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.
26.
27.
#include <QApplication>
#include "ui_hello.h"
using namespace Ui;

QDialog *widg;

int Run(QApplication &app);

int main(int argc, char* argv[])
{
	QApplication app(argc, argv);
	int res = Run(app);
	delete widg;
    return res;
}

int Run(QApplication &app)
{
    widg = new QDialog();
    Dialog dlg;
    dlg.setupUi(widg);

    widg->showFullScreen();
    return app.exec();
}


...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673731
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh Tubrik Akh

Код: plaintext
1.
2.
3.
4.
int const i5 =  5 ;

int &i=i5;



i:\test2007\hui2\hui2.cpp(94): error C2440: 'initializing' : cannot convert from 'const int' to 'int &'

Я же сразу исправился.

Код: plaintext
1.
2.
3.
int const i5 =  5 ;

int const &i=i5;


я пока печатал не видел нового поста
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673737
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разницы же нету
const int i5 = 5;
или
int const i5 = 5;

??
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673757
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
int i5 =  5 ;
const int &i = i5;

так тоже работает..
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673782
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrikразницы же нету
const int i5 = 5;
или
int const i5 = 5;

??

одно и тоже
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673784
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik
Код: plaintext
1.
int i5 =  5 ;
const int &i = i5;

так тоже работает..

есстественно.
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34673790
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh Tubrik
Код: plaintext
1.
int i5 =  5 ;
const int &i = i5;

так тоже работает..

есстественно.

const int &i = 5;

и так тоже) всем спасибо, теперь я спокоен
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674282
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik wrote:

> int &i что можно делат с такой переменной?
то, же, что и с int

> что она вообще из себя представляет?
адрес оригинальной переменной.

> можно ли ей присвоить значение?
значение присвоить можно, но заставить указывать на новую переменную -
нельзя.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674288
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik wrote:

> int &i = *(int *)2;
accessViolation будет. Вы берете ссылку на переменную, которая якобы
находится по адресу 0x00000002.

> бывают ли для нее достойные применения?
int a = 3;
int& b = a;
Плюсы по сравнению с указателем в том, что требует инициализации и не может
указывать на 0 (если не изваращаться :)).

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674295
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV
> int &i = *(int *)2;
accessViolation будет. Вы берете ссылку на переменную, которая якобы
находится по адресу 0x00000002.


gcc 3.3.3 номально пропускает. Одно из 2-х:
1) либо он оптимизирует без реального разыменования.
2) либо приводит к int i.
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674299
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tAZAR wrote:

> Кто вам даст потом безнаказанно писать в память, которую вы не выделяли?
В MS-DOS программе реального времени, по идее, такое можно. (но вот только
не факт, что в адрес 0x00000002).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674317
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh wrote:

> gcc 3.3.3 номально пропускает. Одно из 2-х:
А если туда писать попробовать? :)
Компилиться-то такое должно...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674319
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV
tAZAR wrote:

> Кто вам даст потом безнаказанно писать в память, которую вы не выделяли?
В MS-DOS программе реального времени, по идее, такое можно. (но вот только
не факт, что в адрес 0x00000002).
Posted via ActualForum NNTP Server 1.4

Там, вроде таблица прерываний. В таблицу писать разрешает, насколько я помню.
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674323
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV
Akh wrote:

> gcc 3.3.3 номально пропускает. Одно из 2-х:
А если туда писать попробовать? :)
Компилиться-то такое должно...
Posted via ActualForum NNTP Server 1.4

Скомпилится.

Дело в другом. accessViolation не будет при чтении.
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674354
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh ErV
> int &i = *(int *)2;
accessViolation будет. Вы берете ссылку на переменную, которая якобы
находится по адресу 0x00000002.


gcc 3.3.3 номально пропускает. Одно из 2-х:
1) либо он оптимизирует без реального разыменования.
2) либо приводит к int i.
И не удивительно, адрес допустимый и читать его можно
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674373
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded Akh ErV
> int &i = *(int *)2;
accessViolation будет. Вы берете ссылку на переменную, которая якобы
находится по адресу 0x00000002.


gcc 3.3.3 номально пропускает. Одно из 2-х:
1) либо он оптимизирует без реального разыменования.
2) либо приводит к int i.
И не удивительно, адрес допустимый и читать его можно

Вообще, я даже не уверен, что он с него что-то читает.

Бедь, если не удается получить смещение при инициализации ссылки, то он будет хранить указатель. Т.е. int &i будет указателем на 0x000002. Потом он и выводиться. Берется адресс ссылки, и мы видим 2-ку.

Разыменовывать адрес, чтобы потом получить указатель разыменованных данных бессмысленно. Компилятор это оптимизирует, и акссес виолейшен обходиться стороной.

:) Такая вот мысля.
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674481
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh wrote:

> Бедь, если не удается получить смещение при инициализации ссылки, то он
> будет хранить указатель. Т.е. int &i будет указателем на 0x000002. Потом
> он и выводиться. Берется адресс ссылки, и мы видим 2-ку.
Не должно быть такого. Там 2 кастится в указатель на int.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674500
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV
Akh wrote:

> Бедь, если не удается получить смещение при инициализации ссылки, то он
> будет хранить указатель. Т.е. int &i будет указателем на 0x000002. Потом
> он и выводиться. Берется адресс ссылки, и мы видим 2-ку.
Не должно быть такого. Там 2 кастится в указатель на int.
Posted via ActualForum NNTP Server 1.4
Это-то да, вот только выводится &i
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34674527
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded wrote:

> Это-то да, вот только выводится &i
Гм. А если по адресу лежит 2? :)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34676296
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV
blinded wrote:

> Это-то да, вот только выводится &i
Гм. А если по адресу лежит 2? :)

Не все ли равно что там лежит? Обращения к значению не было.
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34730553
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще один вопросик :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
int &func()
{
	int a =  5 ;
	return a;
}//

int main(int argc, char* argv[])
{
	int &b = func();

	printf("\n&b = [%d]", b);
	printf("\n\n");

	b =  3 ;
	
	printf("\n&b = [%d]", b);
	printf("\n\n");

	return  0 ;
}

как так получается?
b вроде становится псевдонимом переменной a, которая разрушается при выходи и fucn()
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34730641
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik wrote:

> еще один вопросик :)
>
> int &func()
> {
> int a = 5;
> return a;
> }//
Нельзя так делать.
int a создается на стеке, и при выходе из функции её значение с очень
большой вероятностью будет затерто каким-нибудь мусором (так как указатель
стека изменяется). При попытке записи в этот результат будут порушены
данные, либо будет AccessViolation (или SegmentationFault :)).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
int &i; что можно делат с такой переменной?
    #34730650
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понял
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / int &i; что можно делат с такой переменной?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]