1

次のような配列を宣言すると:

int *array; 
array=(int *)malloc(10*sizeof(int));

そして...配列[5]が空かどうか知りたいのですが、どうすればよいですか?

if(*array[5]==NULL){
    printf("is it correct? ");
}

前もって感謝します!

4

3 に答える 3

1

配列を使用して何かを行う前に配列に NULL を入力し、それを「空にした」後に配列スロットに NULL を入れる場合は、次のようなコードが必要です。

if (array[5] == NULL) {
    printf("Cell 5 is empty");
}

は必要ありません*

また、malloc はこれを NULL であらかじめ埋めないので、それに依存しないでください。

ただし、この場合、配列に NULL を入れてもあまり意味がないことに注意してください。NULL は空のポインターの特別な値であり、の個々の要素はそうでarrayはありません。この場合、状況に応じて、0 や -1 などの他の「空の」値を保存する必要があります。

ポインターを保存したい場合はarray、その宣言を次のように変更する必要があります。

int **array

これにより、使用方法に応じて、ダブルポインターまたはポインターの配列になります。それを割り当てると、次のように機能します。

int **array;
array = malloc(sizeof(int*) * 10);

その時点で、 の各要素arrayはポインターであり、演算子で逆参照できます*

于 2012-11-02T13:34:31.817 に答える
0

使用不可 * または [] 使用

*(array+5) == NULL

また

array[5] == NULL

array は int または int 配列へのポインタであるため、両方ではありません (同じことであり、どのように表示するかによって異なります)。 *array[5]は、スロット 5 の int ポインターが指す整数であり、 と同等**(array+5)です。NULL をテストする場合は、malloc の後でメモリを 0 に設定する必要があることに注意してください。memset(array, 0, 10*sizeof(int)) を使用します。

于 2012-11-02T13:34:15.770 に答える
0

array[5]は初期化されていないintです。array[5]は であるため、すでにintその場所で を返してarrayいるint*ため、逆参照しても意味がありません。

空ではなく、そこから読み取ることも違法です。

于 2012-11-02T13:34:25.367 に答える