次のような配列を宣言すると:
int *array;
array=(int *)malloc(10*sizeof(int));
そして...配列[5]が空かどうか知りたいのですが、どうすればよいですか?
if(*array[5]==NULL){
printf("is it correct? ");
}
前もって感謝します!
次のような配列を宣言すると:
int *array;
array=(int *)malloc(10*sizeof(int));
そして...配列[5]が空かどうか知りたいのですが、どうすればよいですか?
if(*array[5]==NULL){
printf("is it correct? ");
}
前もって感謝します!
配列を使用して何かを行う前に配列に 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
はポインターであり、演算子で逆参照できます*
。
使用不可 * または [] 使用
*(array+5) == NULL
また
array[5] == NULL
array は int または int 配列へのポインタであるため、両方ではありません (同じことであり、どのように表示するかによって異なります)。
*array[5]
は、スロット 5 の int ポインターが指す整数であり、 と同等**(array+5)
です。NULL をテストする場合は、malloc の後でメモリを 0 に設定する必要があることに注意してください。memset(array, 0, 10*sizeof(int)) を使用します。
array[5]
は初期化されていないint
です。array[5]
は であるため、すでにint
その場所で を返してarray
いるint*
ため、逆参照しても意味がありません。
空ではなく、そこから読み取ることも違法です。