次のような配列を宣言すると:
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*ため、逆参照しても意味がありません。
空ではなく、そこから読み取ることも違法です。