Существует разница в использовании * при определении переменной и при ее использовании.
В объявлении
int *myVariable;
Означает указатель на целочисленный тип данных,При использовании, однако,
*myVariable = 3;
Означает разыменование указателя и делает структуру, на которую он указывает, равной трем, вместо того, чтобы сделать указатель равным адресу памяти 0x 0003.
Так что вваша функция, вы хотите сделать это:
void makePointerEqualSomething(int* pInteger)
{
*pInteger = 7;
}
В объявлении функции * означает, что вы передаете указатель, но в его фактическом теле кода * означает, что вы получаете доступ к тому, на что указывает указатель.
В попытке избавиться от любой путаницы, которую вы испытываете, я кратко зайду в амперсанд (&)
& означает, что получить адрес чего-либо, его точное местоположение в памяти компьютера, поэтому
int & myVariable;
В объявлении подразумевается адрес целого числа или указателя!
Это однако
int someData;
pInteger = &someData;
Означает, что сам указатель pInteger (помните, указатели)это просто адреса памяти того, на что они указывают), равные адресу 'someData' - так что теперь pInteger будет указывать на некоторые данные и может использоваться для доступа к ним, когда вы обращаетесь к ним:
*pInteger += 9000;
Doeэто имеет смысл для вас?Есть ли что-то еще, что вас смущает?
@ Edit3:
Почти правильно, за исключением трех операторов
bar = *oof;
означает, что указатель на строку равен целому числу, а не то, на что указывает бар, что является недействительным.
&bar = &oof;
Амперсанд подобен функции, как только он возвращает адрес памяти, вы не можете изменить, откуда он пришел.Точно так же, как этот код:
returnThisInt("72") = 86;
Недопустим, как и ваш.
Наконец,
bar = oof
Не означает, что "бар указывает на указатель на oof."Скорее, это означает, что bar указывает на адрес, на который указывает oof, поэтому bar указывает на то, на что указывает foo, а не bar указывает на foo, который указывает на oof.