Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

И снова указатели

7
30 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: igor_nf
С точки зрения C/C++, если мы прибавим к указателю единицу, мы заставим его указывать на объект в памяти, следующий за указываемым

Это если размер текущего объекта(на который уже указывает указатель) равен 1 байт.Чтобы реализовать то,что предложили вы,надо к указателю прибавить sizeof объекта

1.9K
30 марта 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: @pixo $oft
Это если размер текущего объекта(на который уже указывает указатель) равен 1 байт.Чтобы реализовать то,что предложили вы,надо к указателю прибавить sizeof объекта


Вовсе нет: int a; a = a + 1; прибавит к а размер int... и будет указывать на "следующий" int. Почитайте теорию...

7
30 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: GreenRiver
int a; a = a + 1;

Имеем:переменная a(при этом ещё и неинициализированная!),в которой хранится неизвестное значение.К её значению прибавляем 1(проще было a++ написать,в самом деле) и получаем в a значение на 1 больше.Всего-то…

 
Код:
#include <iostream>
int a;
int main(int argc, char *argv[])
{
    a=a+1;
    std::cout<<a<<"\n";
    return 0;
}
выводит всё-таки 1(видимо,a изначально =0).Даже если
 
Код:
#include <iostream>
int main(int argc, char *argv[])
{
    int a;
    std::cout<<a<<"\n";
    a=a+1;
    std::cout<<a<<"\n";
    return 0;
}
в результате(у меня) получилось 2 и 3
1
30 марта 2009 года
kot_
7.3K / / 20.01.2000
Чет вас понесло. Создайте отдельно тему и там треплитесь.
igor_nf прав - арифметика указателей в С++ учитывает размер объекта на который эти указатели указывают.
Т.е.:
 
Код:
int *p = new int(0);
p++;

на самом деле:
 
Код:
p = p+sizeof(*p);

igor_nf не прав - в ассемблере указателя как такового нет. Есть адрес. Прибавив к адресу 1 мы его на один увеличим. Не надо путать.
GreenRiver - хоть сам понял чего сказать то хотел?
1
30 марта 2009 года
kot_
7.3K / / 20.01.2000
Цитата: @pixo $oft
Это если размер текущего объекта(на который уже указывает указатель) равен 1 байт.Чтобы реализовать то,что предложили вы,надо к указателю прибавить sizeof объекта


Т.е. имея массив объектов и указатель на его первый элемент - куда по вашему будет ссылаться этот указатель если к нему добавить единицу?
Согласно вашим рассуждениям вся STL должна перестать работать.

47K
31 марта 2009 года
centnew
15 / / 29.03.2009
Если захочется разбираться то вот
http://www.winsim.com/diskid32/diskid32.html

А вот на это http://www.citforum.ru/programming/digest/realhello.shtml взгляни обязательно!

и вот ещё http://www.bestreferat.ru/referat-43002.html
1.9K
31 марта 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: kot_

GreenRiver - хоть сам понял чего сказать то хотел?


Понял, но накосячил, торопился... Хотел написать
int *a;
a = a + 1;
@pixo $oft, можете поэкспериментировать создав массив из double и перемещаясь по нему таким образом... Чтобы не было сомнений.

P.S. по-моему очевидно, что отвечая про указатели, и написав int a; я просто пропустил звездочку... Нет блин лишь бы побазарить...

1
31 марта 2009 года
kot_
7.3K / / 20.01.2000
Цитата: GreenRiver
Понял, но накосячил, торопился... Хотел написать
int *a;
a = a + 1;
@pixo $oft, можете поэкспериментировать создав массив из double и перемещаясь по нему таким образом... Чтобы не было сомнений.

P.S. по-моему очевидно, что отвечая про указатели, и написав int a; я просто пропустил звездочку... Нет блин лишь бы побазарить...


т.е. ты считаешь что теперь все верно? ;)

47K
31 марта 2009 года
centnew
15 / / 29.03.2009
Вот только что читал, что между именем масива и указателем существует одна маленькая разность, имя масива это имя масива а указатель это указатель, и если
float a[10], *ptf;
//то
а++;
//или
a=ptf; // ошибка
//а,
ptf=a;
//или
ptf++// допускается
1.9K
01 апреля 2009 года
GreenRiver
451 / / 20.07.2008
Цитата: kot_
т.е. ты считаешь что теперь все верно? ;)


ОМГ :) Это пример... Предлагаю прекратить беспредметную беседу...

Для тех кто в танке:
int *a = new int[5];
a = a + 1; // теперь указывает на второй элемент массива

centnew, все верно... может откроешь тему "Как я учил Си и что из этого вышло" :)

3
01 апреля 2009 года
Green
4.8K / / 20.01.2000
Цитата: centnew
Вот только что читал, что между именем масива и указателем существует одна маленькая разность, имя масива это имя масива а указатель это указатель


Разница между массивом и указателем значительно существеннее.
Была у нас скандальная тема по этому поводу:
http://forum.codenet.ru/showthread.php?p=204908#post204908

87
01 апреля 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Green
Была у нас скандальная тема по этому поводу


вот это сообщение из той темы мне особо понравилось:
http://forum.codenet.ru/showpost.php?p=205152&postcount=44

И где это такие учебники находите, в каторых такие приемы приведены? Хотя, может я не внимательно читаю свои...

3
01 апреля 2009 года
Green
4.8K / / 20.01.2000
Цитата: Kogrom
вот это сообщение из той темы мне особо понравилось:
http://forum.codenet.ru/showpost.php?p=205152&postcount=44

И где это такие учебники находите, в каторых такие приемы приведены? Хотя, может я не внимательно читаю свои...


Мы читаем стандарт... ;)
Остальное домысливаем, примеры сочиняем сами.

87
01 апреля 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Green
Мы читаем стандарт... ;)
Остальное домысливаем, примеры сочиняем сами.


Ну, ну... А еще мы читаем Александреску и подобных ему, читаем исходники Boost. Однако, Александреску пишет порою заумно - я пока не осилил его книг. В Бусте много чего есть - такой приёмчик не сразу встретишь... Надеялся, что может есть понятный для простых смертных учебник, где есть подборка таких приёмчиков.

3
01 апреля 2009 года
Green
4.8K / / 20.01.2000
Цитата: Kogrom
Ну, ну... А еще мы читаем Александреску и подобных ему, читаем исходники Boost. Однако, Александреску пишет порою заумно - я пока не осилил его книг. В Бусте много чего есть - такой приёмчик не сразу встретишь... Надеялся, что может есть понятный для простых смертных учебник, где есть подборка таких приёмчиков.


Александресу - пройденный этап. Лет пять назад фанател, потом наломал грабель, применяя приемчики в его духе, и остыл.

Буст - большая солянка, но есть кое-что поучительное.

1
01 апреля 2009 года
kot_
7.3K / / 20.01.2000
мля. С вами демократию не построишь. Перезжаем. :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог