1. ホーム
  2. c

[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語

2022-01-28 15:16:57

質問

この投稿が無知だと思われたら申し訳ないのですが、私はまだC言語を使い始めたばかりで、あまり理解できていないのです。今、ポインターを理解しようとしています。

このコードは、change関数でbの値を変更し、ポインタを渡すことで(戻らずに)main関数に持ち帰ることができるかどうかをテストするために作りました。

しかし、次のようなエラーが発生します。

Initialization makes pointer from integer without a cast
    int *b = 6

私が理解したところでは

#include <stdio.h>

int change(int * b){
     * b = 4;
     return 0;
}

int main(){
       int * b = 6;
       change(b);
       printf("%d", b);
       return 0;
}

Ill 私が本当に心配しているのはこのエラーを修正することなのですが、もし私のポインタの理解が完全に間違っているのであれば、批判を受けることに抵抗はないです。

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

動作させるためには、以下のようにコードを書き換えてください。

#include <stdio.h>

int change(int * b){
    * b = 4;
    return 0;
}

int main(){
    int b = 6; //variable type of b is 'int' not 'int *'
    change(&b);//Instead of b the address of b is passed
    printf("%d", b);
    return 0;
}

上記のコードで動作します。

C言語では、関数内で変数の値を変更する場合、以下の方法で変数に値を渡します。 参照 となります。これについては、こちらで詳しく説明されています -。 リファレンスによるパス

このエラーは、タイプキャストせずにポインターの変数に整数を格納しようとしていることを意味します。このエラーをなくすには、この行を次のように変更します(ただし、ロジックはまだ間違っているので、プログラムは動作しません)。

int * b = (int *)6; //This is typecasting int into type (int *)