Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-11-2004, 10:13   #1
Ir0nM4id3n84
Bannato
 
Iscritto dal: Nov 2004
Messaggi: 124
[C]Problema nel passare un vettore a una funzione

Ciao,
ho trovato questo programma sul libro di programmazione ma non mi funziona e non riesco a capire il perchè...a me sembra logico....che c'è di sbagliato?

/* Passare alla funzione un vettore */

#include <stdio.h>
#define SIZE 5

void modificaArray(int[], int);

int main(){

int a[SIZE] = {0,1,2,3,4};
int i;

printf("Effetto di passare un intero array mediante una chiamata per riferimento: \n \n Il valore dell'array originale è:\n");

for(i=0; i<=SIZE-1;i++)
printf("%3d",a[i]);

printf("\n");

modificaArray(a, SIZE); // I vettori sono passati per RIFERIMENTO
printf("Il valore dell'array modificato è:\n");

for(i=0;i=SIZE-1;i++)
printf("%3d",a[i]);

return 0;
}

void modificaArray(int b[], int size){
int j;

for(j=0; j<=size-1;j++)
b[j] *= 2;
}


Altre domande:

1)Perchè nel prototipo della funzione void modificaArray(int[], int);
c'è int[] ? vuole semplicemente dire che uno degli argomenti è un array? e l'altro int indica il valore SIZE perchè cmq la funzione è per valore anche se simula la chiamata per riferimento e la funzione vede il mio vettore come un puntatore alla prima locazione del vettore?

2)Quando chiamo la funzione con il comando: modificaArray(a, SIZE);
perchè non devo mettere le parentesi graffe?

3)Domandone sulla mia funzione:

void modificaArray(int b[], int size){
int j;

for(j=0; j<=size-1;j++)
b[j] *= 2;
}


quì metto b[] invece che a[] e size invece che SIZE perchè sono copie dei valori?La funzione riceve un puntatore alla prima locazione del vettore e poi ne modifica gli elementi moltiplicandoli per 2...ho capito bene?

Grazie
Ir0nM4id3n84 è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2004, 10:29   #2
akyra
Senior Member
 
L'Avatar di akyra
 
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
probabilmente non hai notato che il problema non è nulla di trascendentale, ma è soltanto qui:

Codice:
 for(i=0;i=SIZE-1;i++)
printf("%3d",a[i]);

se scrivere "i=SIZE-1" non stamperà mai l'array modificato, perchè la condizione del For non è mai soddisfatta in quanto la variabile i non è uguale a "SIZE-1".....piuttosto metti "i<SIZE"

per quanto riguarda le altre domande:

1) esatto, nel prototipo mettere "int * nomevettore" "oppure "int [] nomevettore" è la stessa cosa, perchè l'array non è altro che un puntatore alla prima locazione dell'array

2) questa non la capisco, perchè dovrebbero esserci le graffe scusa? è una chiamata di procedura, non è la definizione di una procedura...


3) non del tutto corretto, per quanto riguarda la variabile b, il suo valore è effettivamente una copia del valore passato alla funzione (quindi di SIZE).
Per quanto riguarda l'array, esso non è una copia, ma è l'array originale, in quanto il passaggio alla funzione avviene per riferimento, non per valore, perciò quello che vai a modificare sulla funzione è il vettore originario, non la copia (penso che questo lo sai già, non so se hai malposto la domanda dicendo che sono "copie di valori")
__________________

Ultima modifica di akyra : 24-11-2004 alle 10:40.
akyra è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2004, 10:57   #3
Ir0nM4id3n84
Bannato
 
Iscritto dal: Nov 2004
Messaggi: 124
Quote:
2) questa non la capisco, perchè dovrebbero esserci le graffe scusa? è una chiamata di procedura, non è la definizione di una procedura...
mmm volevo dire parentesi quadre....

per la 3 lo so che è il vettore originale perchè il C non passa mai vettori e non ritorna mai oggetti di tipo vettore ma soltanto puntatori quindi indirizzi di memoria fisici....
intendevo dire che non mi era chiaro perchè bisognava dargli un altro nome: void modificaArray(int b[], int size){


Cmq grazie mille, sei stato molto chiaro e io molto fesso a non accorgermi di aver sbagliato a digitare la condizione.

Ciao e grazie
Andrea
Ir0nM4id3n84 è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2004, 11:22   #4
akyra
Senior Member
 
L'Avatar di akyra
 
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
Quote:
Originariamente inviato da Ir0nM4id3n84
mmm volevo dire parentesi quadre....

per la 3 lo so che è il vettore originale perchè il C non passa mai vettori e non ritorna mai oggetti di tipo vettore ma soltanto puntatori quindi indirizzi di memoria fisici....
intendevo dire che non mi era chiaro perchè bisognava dargli un altro nome: void modificaArray(int b[], int size){


Cmq grazie mille, sei stato molto chiaro e io molto fesso a non accorgermi di aver sbagliato a digitare la condizione.

Ciao e grazie
Andrea
non è che BISOGNA dargli un altro nome, lo ha fatto il libro, ma tu puoi dargli benissimo gli stessi nomi (oppure nel prototipo puoi fare a meno di mettere il nome della variabile, come nel tuo esempio)...quello che fa durante il parsing del codice è vedere se i tipi nei prototipi sono coerenti coi tipi passati nelle chiamate delle procedure (nel tuo caso controlla che alla procedura "modificaArray" venga passato un puntatore a vettore ed un intero), per questo non occorre dare un nome alle variabili nei prototipi.....non c'è nessun obbligo di differenziaore i nomi delle variaibili dai prototipi alle definizioni delle procedure (per cui se tu nel prototipo di una funzione scrivi " void funzione(int a, float b)" , non occorre che quando la definisci scrivi "void funzione(int c, float d){......} , in quanto i nomi delle variabili possono anche essere gli stessi)



comunque sbagliare è normale, non ti preoccupare, a me è capitato di peggio
__________________
akyra è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2004, 12:35   #5
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
per quanto riguarda la funzione modificaArray(), puoi benissimo togliere il secondo parametro (cioè size) perchè tu hai già dichiarato con un macro all'inizio dl programma il valore di SIZE che è 5. quindi SIZE sarà visibile in tutto il programma.



nella inizializzazione dell'array a non inserire tra quadre la macro SIZE in quanto stai inizializzando l'array contestualmente alla dichiarazione e la taglia dell'array non serve. se invece avresti inizializzato l'array dopo la dichiarazione allora in fase di dichiarazione avresti dovuto mettere il SIZE.

come ho detto non serve passare il parametro size (minuscolo) in quanto hai già dichiarato SIZE che essendo una macro è visibile in tutto il programma. per quanto riguarda il nome degli array tu puooi assegnare anche lo stesso nome perchè ti trovi in funzioni diverse. se invece avessi dichiarato una variabile globale col nome a[] allora questa sarebbe visibile in tutte le funzioni. siccome tu hai dichiarato a[] all'interno del main, in modificaArray() tu puoi assegnare qualsiasi nome all'array.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2004, 14:33   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da VegetaSSJ5
per quanto riguarda la funzione modificaArray(), puoi benissimo togliere il secondo parametro (cioè size) perchè tu hai già dichiarato con un macro all'inizio dl programma il valore di SIZE che è 5. quindi SIZE sarà visibile in tutto il programma.
Dipende dall'uso che se ne vuole fare di quella funzione... Se non si volesse applicare a tutti gli elementi del vettore o se si volesse riutilizzare in caso di allocazione dinamica sarebbe meglio anche passare la dimensione....
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2004, 16:08   #7
Ir0nM4id3n84
Bannato
 
Iscritto dal: Nov 2004
Messaggi: 124
si cionci...infatti il proff ha fatto così perchè negli esempi successivi che devo ancora studiarmi ha fatto i vettori e le matrici dinamiche....

Grazie a tutti voi, ora mi sono chiarito un po' le idee :-)
Ir0nM4id3n84 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Anthropic ha un'AI che trova falle in Wi...
I 10 migliori sconti Amazon del weekend:...
Con un coupon scendono ancora: le super ...
Minimo storico per Samsung Galaxy S26 Ul...
Si è conclusa la missione lunare ...
EK Waterblock si arrende agli aumenti, i...
Geekbench si aggiorna: tutti i test con ...
Per la prima volta un computer quantisti...
Telecamere Reolink 4K su Amazon: Wi-Fi 6...
Anthropic vuole farsi i chip da sola? Co...
Il fondatore di Framework: il personal c...
JBL Live Flex 3 a 129€ su Amazon: ANC ad...
Come un uomo ha costruito un'azienda da ...
Multe fino a 400 euro anche se hai pagat...
Tapo lancia una valanga di offerte su Am...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:58.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v