|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1636
|
[C++] Return nelle funzioni
Ciao ragazzi.
Ho una domanda stupida... Ho una funzione che preso in input un array e la sua dimensione, deve cercare se al suo interno c'è un numero X (7, per esempio). Se lo trova deve ritornare la sua posizione. Ho fatto così: Codice:
int * ricerca (int * A, int DIM)
{
for (int I=0; I<DIM; I++)
{
if ( A[i]==7 )
{
return &A[i];
}
}
}
Se non lo trova cosa succede?!? Grazie a tutti per la disponibilità... Ultima modifica di sangueimpazzito : 25-08-2004 alle 13:17. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Metti un return NULL; in fondo, prima dell'ultima parentesi... Ovviamente chi chiama la funzione deve controllare il valore ritornato...
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1636
|
Ho provato, ma continua ad andarmi in segmentation fault...
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1636
|
Quote:
Chiamata della funzione: POSIZIONE=*(ricerca(A, DIM)); // A=array, DIM=dimensione array Funzione: Codice:
int * ricerca (int * A, int DIM)
{
for (int j=0; j<DIM; j++)
{
if ( A[j]==7 )
{
TROVATO=true;
return &A[j];
}
}
return NULL;
}
Se lo trova, tutto ok. Se non lo trova, va in Segmentation fault (core dumped), immagino perchè provi a dereferenziare NULL. Non mi vengono idee per come uscirne... C'è qualcuno che può darmi una mano?!? Grazie mille. Ultima modifica di sangueimpazzito : 25-08-2004 alle 13:18. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Codice:
int *pos = ricerca(...);
if(!pos) {
printf("Non trovato\n");
...
} else {
printf("trovato: %d\n", *pos);
...
}
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1636
|
Quote:
Grazie mille della soluzione, ma devo per forza risolvere ritornando alla funzione principale il booleano TROVATO e l'eventuale posizione. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
|
ma a e' un puntatore, non e' una varialile che contiene qualcosa.
deve puntare ad un'area di memoria che contiene qualcosa. ciao. |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Codice:
int * ricerca (int * A, int DIM)
{
static int hick_hock_hack = -1;
for (int j=0; j<DIM; j++)
{
if ( A[j]==7 )
{
TROVATO=true;
return &A[j];
}
}
TROVATO=false;
return &hick_hock_hack;
}
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 Ultima modifica di ilsensine : 25-08-2004 alle 14:39. |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
cosa è "int *" in linguaggio c/c++?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1636
|
Quote:
Vuoi il motivo?!? Eccolo: Implementare in C++ una funzione che ricevuti come parametri un array di interi e la sua dimensione, ricerchi all'interno dell'array un elemento di valore X. La funzione, nel caso che lo trovi, deve restituire un booleano con valore true e la posizione in cui l'ha trovato. Nel caso che non lo trovi, deve restituire il booleano con valore false. |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Infatti fa in questo modo... Ritorni NULL...cioè zero...che equivale a falso...
Codice:
int *pos = ricerca(...);
if(!pos) {
printf("Non trovato\n");
...
} else {
printf("trovato: %d\n", *pos);
...
}
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Codice:
int ricerca (int * A, int DIM)
{
for (int j=0; j<DIM; j++)
{
if ( A[j]==7 )
{
TROVATO=true;
return j;
}
}
return -1;
}
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Qualunque sia la soluzione, nota l'assoluta inutilità di restiruire il booleano "trovato" quando restituisci la "posizione". Restituisci semplicemente una "posizione impossibile" se l'elemento non è trovato.
Se proprio devi, almeno non usare una orrenda variabile globale.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#18 | ||
|
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1636
|
Quote:
![]() Azz, è vero... L'esercizio era più semplice di quello che pensassi. Codice:
int ricerca (int * A, int DIM)
{
for (int j=0; j<DIM; j++)
{
if ( A[j]==7 )
{
return j;
}
}
return NULL;
}
Pazienza! ![]() Tralasciando l'inutile variabile booleana, se io volessi ritornare un puntatore all'elemento che ho appena trovato... Quote:
Scusatemi ma non l'ho capita... ![]() Ringrazio nuovamente tutti... |
||
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Se la funzione ritorna "int", il valore da ritornare di default è "-1".
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:16.























