Передача адресов и указателей в функции в C: практическое руководство
C: Передача адресов и указателей в функции
Освойте передачу адресов памяти и указателей в функции на C с понятными примерами и экспертными пояснениями.
В C передача адреса вместо значения позволяет функции напрямую манипулировать исходной переменной. Этот метод, называемый передачей по указателю, необходим для эффективного кода и изменения данных в разных областях видимости.
Пример 1: Обмен двух целых чисел по ссылке
#include <stdio.h>
void swap(int *n1, int *n2);
int main(void) {
int num1 = 5, num2 = 10;
/* Передаем адреса num1 и num2 */
swap(&num1, &num2);
printf("num1 = %d\n", num1);
printf("num2 = %d", num2);
return 0;
}
void swap(int *n1, int *n2) {
int temp = *n1;
*n1 = *n2;
*n2 = temp;
}
Запуск этой программы дает:
num1 = 10 num2 = 5
Функция swap() получает указатели n1 и n2, указывающие на исходные переменные num1 и num2. Разыменовывая эти указатели (*n1 и *n2), функция меняет местами фактические значения в памяти, поэтому main() видит обновленные числа. Обратите внимание, что swap() возвращает void, так как она изменяет свои аргументы напрямую.
Пример 2: Увеличение значения через указатель
#include <stdio.h>
void addOne(int *ptr) {
(*ptr)++; /* Увеличиваем значение по заданному адресу */
}
int main(void) {
int i = 10;
int *p = &i;
addOne(p);
printf("%d", *p); /* Выводит 11 */
return 0;
}
Здесь p хранит адрес i. Функция addOne() получает тот же адрес, разыменовывает его и увеличивает базовое значение. После вызова *p (и, следовательно, i) отражает новое значение 11.
Эти примеры иллюстрируют силу передачи по указателю: функции могут изменять переменные, определенные вне их области видимости, обеспечивая эффективную манипуляцию данными без лишнего копирования.
Язык C
- Понимание ключевых слов и идентификаторов C#: правила, списки и лучшие практики
- Освоение побитовых и сдвиговых операторов в C#: полное руководство
- Классы и объекты в C#: Фундаменты надёжного ООП
- Абстрактные классы и методы в C#: практическое руководство
- Частичные классы и методы в C#: понимание и применение
- Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
- Как передавать одномерные и двумерные массивы в функции в C — практическое руководство
- Освоение указателей в C: практическое руководство от экспертов
- Понимание взаимосвязи между массивами и указателями в C
- Освоение структур и указателей в C: практическое руководство