Во-первых, передается ли в функцию changeValue переменная-указатель или передается значение по адресу valuePassed (насколько я знаю, это две разные вещи)
Существует передан адрес переменной testValue
changeValue(&testValue);
, назначенной переменной-указателю valuePassed
, являющейся параметром функции и одновременно локальной переменной функции ..
void changeValue(int *valuePassed)
Вы можете представить вызов функции и определение функции следующим образом
changeValue(&testValue);
//...
void changeValue( /* int *valuePassed */ )
{
int * valuePassed = &testValue;
*valuePassed = 100;
}
Но для valuePassed не был назначен адрес.
Вы неправы. Как вы можете видеть выше, он был назначен по адресу переменной testValue
.
Так что, если адрес testValue (& testValue) передается в функцию changeValue, как печатается 100?
Th целочисленная константа 100
не указана. Это указанная переменная testValue
и ее указанная память, в которой определяется переменная, хранится целочисленная константа 100.
В терминах C передача объекта косвенно через указатель на это называется передачей по ссылке.
Из C стандарта (6.2.5 Типы, стр. # 20)
- тип указателя может быть получен из типа функции или типа объекта, называемого ссылочный тип. Тип указателя описывает объект, значение которого предоставляет ссылку на объект ссылочного типа. Тип указателя, полученный из ссылочного типа T, иногда называют «указателем на T». Конструкция типа указателя из ссылочного типа называется «выводом типа указателя». Тип указателя является полным типом объекта.