私は自分のプログラムでこの割り当てを行っていますが、警告にタイトルが付けられています。コードスニペットは次のとおりです。
table_name[index] = NULL;
そのような発言で何が問題になるのか理解できませんでした。
NULLは有効な整数ではなく、おそらくsで構成される配列のエントリに割り当てられているint
ため、コンパイラは文句を言っています。
NULLは、「何もない」ことを示すデフォルトのポインター値として使用されます。ポインター変数があり、それにNULLが割り当てられている場合、ポインター変数は「何もない」を指していると言えます。
この型の不一致のために、特定のメッセージは、ある型(実際にはポインタ値)をキャストしようとせずに別の型(実際にはポインタ値)に割り当てようとしていることを警告int
しています(これは、回避するためにある型を別の型に変換する方法です)タイプの不一致)。
ポインタの配列がある場合、このNULLの割り当ては完全に問題ありません。
問題は、それtable_name[index]
がポインタではなく整数値であるということです。 NULL
ポインタを表すことを目的としています。
table_name
がとして宣言されている場合は問題なく int*
実行できますが、インデックスに値を設定する場合、コンパイラは配列と同じ型を使用することを期待します。table_name = NULL;
ポインタ値を変数(常に同じデータ型)に割り当てようとすると、コンパイラから同じ反応があります。
例:
#include <stdio.h>
#include <stdlib.h>
int main(){
int X,Y;
int *P_1;
float Z;
float *P_2;
X=5;
Z=3.5;
P_1=&X;
printf("\n X = %d, Z = %.2f\n",X,Z);
printf(" &X = %d\n",&X);
printf(" *P_1 = %d\n",*P_1);
printf(" P_1 = %d\n",P_1);
Y=X;
printf(" Y = %d\n",Y);
X=10;
Y=P_1;
fflush(stdin);
getchar();
return 0;
}