English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo tutorial, imparerai a passare indirizzi come parametri a una funzione tramite esempi. Questa tecnica si chiama "richiamo per riferimento".
In programmazione C, è anche possibile passare indirizzi come parametri a una funzione.
Per accettare questi indirizzi nella definizione della funzione, possiamo utilizzare i puntatori. Questo perché i puntatori servono a memorizzare indirizzi. Facciamo un esempio:
#include <stdio.h> void swap(int* n1, int* n2); int main() { int num1 = 5, num2 = 10; // Passaggio degli indirizzi di num1 e num2 swap(&num1, &num2); printf("num1 = %d\n", num1); printf("num2 = %d", num2); return 0; } void swap(int* n1, int* n2) { int temp; temp = *n1; *n1 = *n2; *n2 = temp; }
Eseguendo questo programma, l'output sarà:
num1 = 10 num2 = 5
Per passare gli indirizzi di num1 e num2 a swap(), si utilizza swap(&num1, &num2);
I puntatori n1 e n2 accettano questi parametri nella definizione della funzione.
void swap(int* n1, int* n2) { ... .. }
Quando *n1 e *n2 cambiano all'interno della funzione swap(), num1 e num2 cambiano anche nella funzione main().
All'interno della funzione swap(), *n1 e *n2 vengono scambiati. Pertanto, num1 e num2 vengono scambiati.
Attenzione, swap() non restituisce nulla. Il suo tipo di ritorno è void.
Questo modo di programmazione in C è chiamato "richiamo per riferimento".
#include <stdio.h> void addOne(int* ptr) { (*ptr)++; // Incrimento di 1 in *ptr } int main() { int* p, i = 10; p = &i; addOne(p); printf("%d", *p); // 11 return 0; }
这里,存储在*p值最初为10。
然后我们将指针p传递给addOne()函数。ptr指针在addOne()函数中获取这个地址。
在函数内部,我们使用(*ptr)++;将存储在ptr上的值增加1。因为ptr和p指针都有相同的地址,所以main()中的*p也是11。