Russian Qt Forum
Ноябрь 24, 2024, 01:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3 4 ... 7   Вниз
  Печать  
Автор Тема: как правильней писать указатель?  (Прочитано 42109 раз)
ufna
Гость
« Ответ #15 : Октябрь 28, 2010, 19:29 »

Я бы с радостью надиктовывал, если бы был более высокоуровненый язык. К примеру, говорю компу - "добавь сюда список, обязательно иконки, загрузка данных из файла ..", а он понимает и делает Улыбающийся аля комп из "Iron Man"
Записан
lenny
Гость
« Ответ #16 : Февраль 11, 2011, 18:20 »

Венгерская нотация уже не в моде?
Код:
char *pchVar;
int *pnVar;
unsigned *puVar

А насчет того где должно быть * есть соображения
char *pchVar1, *pchVar2

Если писать char*, то для второй переменной можно забыть указать *

Возвращать ф-ей указатель, честно говоря, считаю плохим стилем, особенно когда это ф-и или методы, которые создают объекты в динамической памяти, хотя такое используется даже в QT. Ведь, возвращаемое значение можно проигнорировать, и если, например, возвращается адрес выделенной памяти, то могут возникнуть утечки.

Так это противоречит такому объявлению
Код:
  
    int a;
    int* const b = &a;
Я всегда и думал, что звездочка принадлежит типу.
Код:
  
    int* a = new int;
    *a = 10;           //Для работы со значением можно было бы и не звездочку использовать.
                           //Например: @a = 10;


« Последнее редактирование: Февраль 11, 2011, 18:27 от lenny » Записан
brankovic
Гость
« Ответ #17 : Февраль 12, 2011, 00:32 »

Я и так вижу какой у переменных тип. Зачем их дублировать?

+100. Это они с ассемблера притащили и вот до сих пор расстаться не могут Смеющийся Смеющийся Смеющийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #18 : Февраль 12, 2011, 14:11 »

А что такое вообще "переменная" в языках Pascal, C, C++ ? Ее нет "как таковой", всегда есть "адрес". Вопрос только в том "читать/писать содержимое по адресу" или "менять (и) сам адрес".

Примерик
Код
C++ (Qt)
std::vector <int> test;
..
int * p = &test[0];
if (p) {
...
}
 
Так правильно?  Улыбающийся
Записан
shirushizo
Гость
« Ответ #19 : Февраль 12, 2011, 18:29 »

Не помню как там с векторами, а вот с массивом еще проще:
Код:
int *test = new int[elCount];
..
int *p = test;
if (p) {
 ...
}
Переменная test - это адрес первого элемента массива. Поэтому записи равнозначны:
Код:
test[5]
*(test+5)
Записан
lenny
Гость
« Ответ #20 : Февраль 13, 2011, 12:51 »

Так это противоречит такому объявлению
Код:
  
    int a;
    int* const b = &a;
Я всегда и думал, что звездочка принадлежит типу.
Совсем забыл про такую дурацкую возможность.
Код:
  
    int const *b = 10;
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #21 : Февраль 13, 2011, 16:31 »

Не помню как там с векторами, а вот с массивом еще проще:
Ну с массивом-то все ясно, а вот правильно ли это для std::vector ?
Записан
Fat-Zer
Гость
« Ответ #22 : Февраль 13, 2011, 16:35 »

Не помню как там с векторами, а вот с массивом еще проще:
Ну с массивом-то все ясно, а вот правильно ли это для std::vector ?
работать должно, но руки за такие выкрутасы лучше было бы оторвать от греха подальше Веселый
Записан
shirushizo
Гость
« Ответ #23 : Февраль 13, 2011, 22:14 »

...
работать должно, но руки за такие выкрутасы лучше было бы оторвать от греха подальше Веселый
А никто и не спорит, индусы не в почете, а писать главное однообразно.

А с точки зрения семантики - int *p; int * myclass::mefunc();
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #24 : Февраль 14, 2011, 13:38 »

работать должно, но руки за такие выкрутасы лучше было бы оторвать от греха подальше Веселый
Что же я такого плохого сделал, чем нарушил требования языка?  Улыбающийся
Записан
Fat-Zer
Гость
« Ответ #25 : Февраль 14, 2011, 17:18 »

работать должно, но руки за такие выкрутасы лучше было бы оторвать от греха подальше Веселый
Что же я такого плохого сделал, чем нарушил требования языка?  Улыбающийся
языка может и не нарушили, а вот инкапсуляцию просто растоптали... вы обратились ко внутренним структурам объекта, а ведь реализация вектора всегда может измениться. ИМХО хакерство и прикладное программирование(если не считать системное) не совместимы.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #26 : Февраль 14, 2011, 17:29 »

языка может и не нарушили, а вот инкапсуляцию просто растоптали... вы обратились ко внутренним структурам объекта, а ведь реализация вектора всегда может измениться. ИМХО хакерство и прикладное программирование(если не считать системное) не совместимы.
Непонимающий Так оператор(ы) [] возвращают ссылки на элемент вектора (в любой реализации)

Код
C++ (Qt)
int & a = vec[i];  // ссылка на элемент вектора
 
Так что, затем взять адрес "a" уже хакерство?  Улыбающийся
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #27 : Февраль 14, 2011, 17:47 »

А какой смысл в проверке?
Код
C
int * p = &test[0];
if (p) {
...
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
Fat-Zer
Гость
« Ответ #28 : Февраль 14, 2011, 17:48 »

Непонимающий Так оператор(ы) [] возвращают ссылки на элемент вектора (в любой реализации)

Код
C++ (Qt)
int & a = vec[i];  // ссылка на элемент вектора
 
Так что, затем взять адрес "a" уже хакерство?  Улыбающийся
смотря что вы будете с ним делать..
я так ппонял, что вы будете им:
а) обходить им вектор
б) приводить его к указателю на что-нить другое и писать целую структуры в массив и разбирать её...
в) какая-то старая сишная функция, которой нужен int* в качестве параметра
на этом разумные причины кончаются и это всё ИМХО хакерство (ну быть может крове в).

если вы знаете ещё адекватные причины, то можете поделиться...
Записан
brankovic
Гость
« Ответ #29 : Февраль 14, 2011, 17:55 »

если вы знаете ещё адекватные причины, то можете поделиться...

Код
C++ (Qt)
int fd = open (...);
write (fd, &vec [0], vec.size ());
 

кстати это допустимо по стандарту
« Последнее редактирование: Февраль 14, 2011, 17:57 от brankovic » Записан
Страниц: 1 [2] 3 4 ... 7   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 23.