И снова указатели
Это если размер текущего объекта(на который уже указывает указатель) равен 1 байт.Чтобы реализовать то,что предложили вы,надо к указателю прибавить sizeof объекта
Вовсе нет: int a; a = a + 1; прибавит к а размер int... и будет указывать на "следующий" int. Почитайте теорию...
Имеем:переменная a(при этом ещё и неинициализированная!),в которой хранится неизвестное значение.К её значению прибавляем 1(проще было a++ написать,в самом деле) и получаем в a значение на 1 больше.Всего-то…
int a;
int main(int argc, char *argv[])
{
a=a+1;
std::cout<<a<<"\n";
return 0;
}
int main(int argc, char *argv[])
{
int a;
std::cout<<a<<"\n";
a=a+1;
std::cout<<a<<"\n";
return 0;
}
igor_nf прав - арифметика указателей в С++ учитывает размер объекта на который эти указатели указывают.
Т.е.:
p++;
на самом деле:
igor_nf не прав - в ассемблере указателя как такового нет. Есть адрес. Прибавив к адресу 1 мы его на один увеличим. Не надо путать.
GreenRiver - хоть сам понял чего сказать то хотел?
Т.е. имея массив объектов и указатель на его первый элемент - куда по вашему будет ссылаться этот указатель если к нему добавить единицу?
Согласно вашим рассуждениям вся STL должна перестать работать.
http://www.winsim.com/diskid32/diskid32.html
А вот на это http://www.citforum.ru/programming/digest/realhello.shtml взгляни обязательно!
и вот ещё http://www.bestreferat.ru/referat-43002.html
GreenRiver - хоть сам понял чего сказать то хотел?
Понял, но накосячил, торопился... Хотел написать
int *a;
a = a + 1;
@pixo $oft, можете поэкспериментировать создав массив из double и перемещаясь по нему таким образом... Чтобы не было сомнений.
P.S. по-моему очевидно, что отвечая про указатели, и написав int a; я просто пропустил звездочку... Нет блин лишь бы побазарить...
int *a;
a = a + 1;
@pixo $oft, можете поэкспериментировать создав массив из double и перемещаясь по нему таким образом... Чтобы не было сомнений.
P.S. по-моему очевидно, что отвечая про указатели, и написав int a; я просто пропустил звездочку... Нет блин лишь бы побазарить...
т.е. ты считаешь что теперь все верно? ;)
float a[10], *ptf;
//то
а++;
//или
a=ptf; // ошибка
//а,
ptf=a;
//или
ptf++// допускается
ОМГ :) Это пример... Предлагаю прекратить беспредметную беседу...
Для тех кто в танке:
int *a = new int[5];
a = a + 1; // теперь указывает на второй элемент массива
centnew, все верно... может откроешь тему "Как я учил Си и что из этого вышло" :)
Разница между массивом и указателем значительно существеннее.
Была у нас скандальная тема по этому поводу:
http://forum.codenet.ru/showthread.php?p=204908#post204908
вот это сообщение из той темы мне особо понравилось:
http://forum.codenet.ru/showpost.php?p=205152&postcount=44
И где это такие учебники находите, в каторых такие приемы приведены? Хотя, может я не внимательно читаю свои...
http://forum.codenet.ru/showpost.php?p=205152&postcount=44
И где это такие учебники находите, в каторых такие приемы приведены? Хотя, может я не внимательно читаю свои...
Мы читаем стандарт... ;)
Остальное домысливаем, примеры сочиняем сами.
Остальное домысливаем, примеры сочиняем сами.
Ну, ну... А еще мы читаем Александреску и подобных ему, читаем исходники Boost. Однако, Александреску пишет порою заумно - я пока не осилил его книг. В Бусте много чего есть - такой приёмчик не сразу встретишь... Надеялся, что может есть понятный для простых смертных учебник, где есть подборка таких приёмчиков.
Александресу - пройденный этап. Лет пять назад фанател, потом наломал грабель, применяя приемчики в его духе, и остыл.
Буст - большая солянка, но есть кое-что поучительное.