2010-11-14 20 views
5

Come posso verificare se un elemento in una matrice è vuoto in C?Come verificare se un elemento è nullo in una matrice in C?

if(array[i] == NULL) 

Non sembra funzionare.

+2

Che cosa non funziona? Quella riga di codice non è di grande aiuto. Cos'è 'array', dove viene inizializzato? – casablanca

+3

Si prega di definire cosa intendi per "non funziona" - non si compila? Il comportamento di runtime è diverso da quanto previsto? (Forse hai dimenticato di inizializzare il contenuto dell'array su NULL prima?) – cdhowie

+0

Penso che questo sia il problema di cdhowie dato che sono abituato a java che tutto è inizializzato su null. Qual è l'inizializzazione predefinita di un elemento in C. – Alex

risposta

13

Cosa intendi con vuoto?

Quando un programma C viene eseguito, le variabili che non si inizializzano esplicitamente hanno valori imprevedibili.

è necessario impostare tutte le celle di matrice a NULL (o 0, o per qualsiasi valore rappresenta Emptyness nella logica del programma) e quindi è possibile verificare in modo che hai fatto:

int *array[3] = { NULL, NULL, NULL }; // array of three "empty" pointers 

... 

for(i = 0; i < 3; ++ i) { 
    if(array[i] == NULL) { 
    // i-th cell is "empty" 
    } 
} 
+2

+1 per sottolineare la mancanza di bug di inizializzazione - probabilmente cosa sta succedendo qui. –

+2

'int * array [3] = {NULL}' dovrebbe essere sufficiente per annullare tutti gli elementi dell'array. – Uila

+0

@Uila: in pratica si, ma penso che potrebbe essere meno chiaro e fuorviante, dal momento che funziona solo per inizializzare un array su 0. Non è possibile utilizzare tale scorciatoia per inizializzare tutti gli elementi di un array su 1, e inoltre 'NULL 'potrebbe essere diverso da 0. – peoro

1

Domanda risposta:

Cosa hai postato è il codice corretto.

Elaborazione:

Se "non sembra funzionare", forse il problema non si trova in questa posizione nel codice. Se pubblichi un esempio più completo di ciò che hai, del comportamento previsto del codice e del comportamento effettivo, potremmo essere in grado di aiutarti.

1

Supponendo che array sia effettivamente un array di puntatori, la singola riga di codice fornita dovrebbe effettivamente verificare che l'elemento nell'indice i sia NULL.

Si noti tuttavia che se array non è inizializzato correttamente (ad esempio: fornire un valore iniziale a ogni cella), la matrice molto probabilmente contiene immondizia e la condizione molto probabilmente finirà per essere falsa.

Problemi correlati