Passare Array come Argomenti di Funzione in C

Ciao là, futuro super campione del programming! ? Oggi, ci imbarcheremo in un'avventura emozionante attraverso il mondo degli array e delle funzioni in C. Come il tuo amico insegnante di scienze informatiche del quartiere, sono qui per guidarti in questa avventura passo per passo. Allora, prendi il tuo zaino virtuale e tuffiamoci!

C - Passing Arrays to Function

Comprendere Array e Funzioni

Prima di immergerci nel passaggio degli array alle funzioni, rinfreschiamo rapidamente la nostra memoria su cosa sono gli array e le funzioni.

Cos'è un Array?

Pensa all'array come a una fila di casellari in un corridoio scolastico. Ogni casellario (elemento) ha un numero (indice) e può contenere qualcosa al suo interno. In C, utilizziamo gli array per memorizzare più elementi dello stesso tipo in una singola variabile.

Cos'è una Funzione?

Una funzione è come un mini-programma all'interno del nostro programma principale. È un insieme di istruzioni che esegue un compito specifico. Pensa a esso come a una scheda di ricetta in un ricettario - puoi usarla ogni volta che hai bisogno di eseguire quel compito particolare.

Ora che abbiamo coperto le basi, esploriamo come possiamo combinare questi due concetti!

Passare Array come Argomenti di Funzione

In C, possiamo passare gli array alle funzioni in diversi modi. Esaminiamo ogni metodo uno per uno.

1. Passare l'Array con il Metodo di Chiamata per Valore

In C, quando passiamo un array a una funzione, stiamo effettivamente passando l'indirizzo del primo elemento dell'array. Questo significa che qualsiasi modifica apportata all'array all'interno della funzione influenzerà l'array originale.

Ecco un esempio:

#include <stdio.h>

void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}

int main() {
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);

printf("Array originale: ");
printArray(myArray, size);

return 0;
}

In questo esempio, stiamo passando myArray alla funzione printArray. Anche se sembra che stiamo passando l'intero array, stiamo effettivamente passando un puntatore al primo elemento.

Output:

Array originale: 1 2 3 4 5

2. Passare l'Array con il Metodo di Chiamata per Riferimento

In C, gli array sono sempre passati per riferimento. Questo significa che quando passi un array a una funzione, stai effettivamente passando un puntatore al primo elemento dell'array.

Ecco un esempio dove modificiamo l'array all'interno della funzione:

#include <stdio.h>

void doubleElements(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] *= 2;
}
}

int main() {
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);

printf("Array originale: ");
for (int i = 0; i < size; i++) {
printf("%d ", myArray[i]);
}
printf("\n");

doubleElements(myArray, size);

printf("Array modificato: ");
for (int i = 0; i < size; i++) {
printf("%d ", myArray[i]);
}
printf("\n");

return 0;
}

In questo esempio, la funzione doubleElements modifica l'array originale raddoppiando ogni elemento.

Output:

Array originale: 1 2 3 4 5
Array modificato: 2 4 6 8 10

3. Passare un Array Bidimensionale a una Funzione

Ora, diamo un'ulteriore livello e parliamo del passaggio di array bidimensionali alle funzioni. È come consegnare un intero foglio di calcolo invece di una singola riga!

Ecco un esempio:

#include <stdio.h>

void print2DArray(int rows, int cols, int arr[rows][cols]) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}

int main() {
int myArray[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

printf("Il mio Array Bidimensionale:\n");
print2DArray(3, 3, myArray);

return 0;
}

In questo esempio, stiamo passando un array bidimensionale alla funzione print2DArray. Nota come specifichiamo le dimensioni nel parametro della funzione.

Output:

Il mio Array Bidimensionale:
1 2 3
4 5 6
7 8 9

4. Funzione per Confrontare la Lunghezza delle Stringhe

Ultimo ma non meno importante, vediamo come possiamo passare le stringhe (che sono essenzialmente array di caratteri) alle funzioni. Creeremo una funzione che confronta la lunghezza di due stringhe.

#include <stdio.h>
#include <string.h>

int compareStringLengths(char str1[], char str2[]) {
int len1 = strlen(str1);
int len2 = strlen(str2);

if (len1 > len2) return 1;
if (len1 < len2) return -1;
return 0;
}

int main() {
char string1[] = "Hello";
char string2[] = "World!";

int result = compareStringLengths(string1, string2);

if (result > 0) {
printf("%s è più lunga di %s\n", string1, string2);
} else if (result < 0) {
printf("%s è più lunga di %s\n", string2, string1);
} else {
printf("%s e %s hanno la stessa lunghezza\n", string1, string2);
}

return 0;
}

In questo esempio, stiamo passando due stringhe alla funzione compareStringLengths, che restituisce 1 se la prima stringa è più lunga, -1 se la seconda stringa è più lunga, e 0 se hanno la stessa lunghezza.

Output:

World! è più lunga di Hello

Conclusione

Complimenti! Hai appena migliorato le tue abilità di programmazione in C imparando come passare gli array alle funzioni. Ricorda, la pratica rende perfetti, quindi non esitare a sperimentare questi concetti nei tuoi programmi.

Ecco una tabella di riepilogo dei metodi che abbiamo coperto:

Metodo Descrizione
Passare Array con Chiamata per Valore Passa l'indirizzo del primo elemento
Passare Array con Chiamata per Riferimento Sempre passato per riferimento in C
Passare Array Bidimensionale Richiede specificare le dimensioni nel parametro della funzione
Passare Stringhe Può essere utilizzato per manipolare o confrontare stringhe

Continua a programmare, continua a imparare, e, soprattutto, divertiti! ??

Credits: Image by storyset