English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base del linguaggio C

Controllo di flusso del linguaggio C

C语言函数

C语言数组

C语言指针

C语言字符串

Struttura del linguaggio C

File del linguaggio C

C altre

Manuale di riferimento del linguaggio C

C语言指针与函数

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:

Esempio: Chiamata per riferimento

#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".

Esempio 2: Passaggio di puntatori a una funzione

#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。