Похоже, вы немного запутались в терминах.
У объекта обычно есть адрес.Это место в памяти, где находится объект.Некоторые временные объекты не имеют адресов, потому что их не нужно хранить.Таким исключением является временный объект «4» в выражении (2+2)*3
. Указатель - это объект, который хранит адрес другого объекта.Следовательно, для каждого типа есть соответствующий указатель.int
имеет int*
, std::string
имеет std::string*
и так далее.
Теперь вы пишете об «адресах указателей».Они существуют.В конце концов, я написал, что указатель - это объект, и поэтому он имеет свой собственный адрес.И вы можете сохранить этот адрес в другом указателе.Например, вы можете сохранить адрес и int*
в int* *
.Но ты действительно хотел этого?Или вы имели в виду «адрес , на который ссылается через указатель»?
Теперь вы приводите рост и вес в качестве примеров.Стандартный способ поменять их в C ++ - это просто std::swap(width, height)
.Обратите внимание на std::
, который является префиксом для функций стандартной библиотеки C ++.std::swap
поменяет почти все.целые, поплавки, жены.(j / k).
Очевидно, у вас есть другая функция подкачки.Он принимает два указателя на целые числа, что означает, что он хочет адреса двух целых чисел.Это легко обеспечить в этом случае.width
является целым числом, а &width
является его адресом.Это может быть сохранено в аргументе указателя int* a
.Точно так же вы можете сохранить адрес &height
в аргументе int*b
.Собрав все вместе, вы получите звонок swap(&width, &height);
Как это работает?Функция swap(int*a, int*b)
имеет два указателя, которые содержат в памяти адрес двух целых чисел.Итак, что он может сделать, это [1] отложить в сторону копию первого целого числа, [2] скопировать второе целое число в памяти, где было первое целое число, и [3] скопировать первое целое число обратно в память, где второецелое число былоВ коде:
void swap(int *a, int *b)
{
int temp = *a; // 1
*a = *b; // 2
*b = temp; // 3
}