1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】C 言語のポインタと配列。[警告] 整数からキャストなしでポインタを作る代入 [クローズド]

2021-12-31 08:27:39

質問

C言語のコードは次のとおりです。

#include<stdio.h>


int *ap;
int a[5]={41,42,43,44,45};
int x;

int main()
{
    ap = a[4];
    x = *ap;
    printf("%d",x);
    return 0;
}

コンパイルしようとすると、警告が表示されます。

[Warning] assignment makes pointer from integer without a cast [enabled by default]

9行目について ap = a[4]; と表示され、端末がクラッシュしてしまいます。9行目を変更して、位置を含まないようにすると ap = a; 警告は出ず、動作します。 

どのように解決するのですか?

この場合 a[4]5th の整数値です。 a , ap は整数へのポインタなので、ポインタに整数を代入していることになり、それが警告となります。
そこで ap を保持するようになりました。 45 で、それを参照解除しようとすると、( *ap このアドレスは無効なアドレスなので、プログラムがクラッシュします。

を行う必要があります。 ap = &(a[4]); または ap = a + 4;

c 配列名はポインタに分解されるため a は配列の1番目の要素を指しています。
このように a は、次のように等価です。 &(a[0]) .