Можно ли передать указатель по ссылке ?
Если можно, приведите пожалуйста пример
void func(int*& p);
Если ты имел в виду указатель на ссылку, то этого сделать нельзя. Да и зачем?
void func(int*& p);
Если ты имел в виду указатель на ссылку, то этого сделать нельзя. Да и зачем?
void func(int*& p); это разъименование указателя, т.е. ты написал void func(int p);
&p - это ссылка на р, а *&р - это р.
Если можно, приведите пожалуйста пример
Может так - void func(void **ppv);
void func(int*& p); это разъименование указателя, т.е. ты написал void func(int p);
&p - это ссылка на р, а *&р - это р.
Да что ты говоришь...
Где ты видел разыменование в объявлении функции?
Да что ты говоришь...
Где ты видел разыменование в объявлении функции?
Я это видел только у тебя.
Что будет в результате в передаваемом параметре?
Да что ты говоришь...
Где ты видел разыменование в объявлении функции?
Без Б... В декларациях & означает объявление ссылки, а как оператор адреса он интерпретируется только в самом коде. Нету там никакого "разыменования"
Я это видел только у тебя.
Что будет в результате в передаваемом параметре?
Попробуй на примере, это не сложно.
Даже пример напишу :)
{
*p++ = 5;
}
int main()
{
int a[]={1,2};
int* p = a;
func(p);
*p = 7;
return 0;
}
void func(int*& p);
Если ты имел в виду указатель на ссылку, то этого сделать нельзя. Да и зачем?
void func(int*& p); - вы абсолютно правы.
Такая функция компилиться без проблем.
Но не компилиться её вызов:
func(p);
- компилер говорит, что не может тип char* привести к типу char*&.
void func(int*& p); это разъименование указателя, т.е. ты написал void func(int p);
&p - это ссылка на р, а *&р - это р.
Чё то мне не вериться, что вы профи :)
Попробуй на примере, это не сложно.
Даже пример напишу :)
{
*p++ = 5;
}
int main()
{
int a[]={1,2};
int* p = a;
func(p);
*p = 7;
return 0;
}
Данный пример не относиться к теме.
Мне нужно поменять значение указателя, а не то, на что он указывает.
Данный пример не относиться к теме.
Мне нужно поменять значение указателя, а не то, на что он указывает.
а p++ разве не меняет значения указателя? :)
void func(int*& p); - вы абсолютно правы.
Такая функция компилиться без проблем.
Но не компилиться её вызов:
func(p);
- компилер говорит, что не может тип char* привести к типу char*&.
Какой компилятор не компилит?
Попробуй на примере, это не сложно.
Даже пример напишу :)
{
*p++ = 5;
}
int main()
{
int a[]={1,2};
int* p = a;
func(p);
*p = 7;
return 0;
}
Да, я был не совсем прав.
По ходу у меня возникло несколько вопросов:
*p++ = 5; что ты хотел сказать этим выражением?
*p++ - изменяет значение указателя, а *р += 1 - изменяет, то на что он указывает
с char действительно странно работает, хотя компилится без проблем.
Какой компилятор не компилит?
C++ Visual Studio 7 (2003/.NET)
C++ Visual Studio 7 (2003/.NET)
А ты все правильно делал??? Толлько что все сделал, все нормально откомпилировалось
Да, я был не совсем прав.
По ходу у меня возникло несколько вопросов:
*p++ = 5; что ты хотел сказать этим выражением?
изменяем значение в переменной, на которую указывает указатель, далее изменяем (инкремент) значение самого указателя.
Что непонятного?
C++ Visual Studio 7 (2003/.NET)
У меня все ок. Покажи весь свой тестовый пример.
изменяем значение в переменной, на которую указывает указатель, далее изменяем (инкремент) значение самого указателя.
Что непонятного?
это не так интересно, меня больше интересует почему *р++ != *р =+ 1, это же эквивалентные операции
это не так интересно, меня больше интересует почему *р++ != *р =+ 1, это же эквивалентные операции
Для C++ характерен префиксный синтаксис выражений (выражения читаются слева направо и группируются в соответствии с приоритетами операторов). По этому *p++ = 2 раскладывается как *(p++) = 2 (по этой причине ввели оператор a->b, заменяющий (*a).b . Если бы мы написали *a.b, то выражение не скомпилилось бы, т.к. было бы интерпретировано как *(a.b) ). *p += 1 просто инкрементирует косвенное значение, т.к. приоритет += ниже приоритета *. Почитай Страуструпа, он об этом достаточно подробно написал
это не так интересно, меня больше интересует почему *р++ != *р =+ 1, это же эквивалентные операции
Это не эквивалентные операции.
Приоритет постфиксного инкремента выше, чем у операции разыменования. Поэтому сначала происходит постфиксныф инкремент указателя, а потом разыменование.
Это довольно подробно расписано у Страуструпа.
Даже приведен такой пример копирования C-style строк:
while( *dest++ = *src++ );