2017-09-29 3 views
-2

*と&のすべての組み合わせを試しました。私はこのプログラムが間違っているかを把握することはできませんし、何が、これは時間の誤差初期化は、キャストのない整数からポインタを作成します。

をコンパイル引き起こしている私は、このエラーを取得しています:

error: initialization makes pointer from integer without a cast 
compilation terminated due to -Wfatal-errors. 

このコードで:

int main() { 
    unsigned int ten = (int) 10; 
    unsigned short *a = (short) 89; 
    unsigned int *p =(int) 1; 
    unsigned short *q = (short) 10; 
    unsigned short *s = (short) 29; 


    function(ten,a,p, q, s); 

    return 0; 
} 

関数プロトタイプは:

int function(unsigned int a, unsigned short *const b, 
        unsigned int *const c, 
        unsigned short *const d, 
        unsigned short *const e); 

この関数は空ですが、私はそれをinpでコンパイルしようとしていますutファイル。

+0

function()を呼び出すが、decode_instruction()のプロトタイプのみを表示する。問題のあるコードを表示してください。 – torstenvl

+0

また、ポインターを間接参照して、ポインターが指すメモリー位置に値を割り当てる必要があります。さらに、メモリを最初に割り当てることなくこれを行うと、それは未定義の動作です。 main()のローカル変数が変数の代わりにポインタとして定義されているのはなぜですか? – torstenvl

+0

ポインターとして定義されるだけでなく、整数で初期化されます。あなたはイニシャライザでポインタを参照解除することはできません...あなたはポインタ自体を初期化することしかできず、後でそれを割り当てることができます(メモリを与えたと仮定して)。 –

答えて

5

これらの変数はポインタであり、あなたは整数(ショート)の値を割り当てるしよう:あなたはコンパイルエラーを取得する理由

unsigned short *a = (short) 89; 
unsigned int *p =(int) 1; 
unsigned short *q = (short) 10; 
unsigned short *s = (short) 29; 

であること。

質問が100%明確ではないが、多分これはあなたが望むものである:

unsigned int ten = (int) 10; 
unsigned short a = (short) 89; 
unsigned int p =(int) 1; 
unsigned short q = (short) 10; 
unsigned short s = (short) 29; 

function(ten, &a, &p, &q, &s); 
1

問題は、割り当てると言って、すなわち(apqsのための整数定数とのポインタを初期化されています値89int*と入力してください。89のタイプはintで、int*ではありません。あなたはおそらく、あなたの代わりにこれらの変数へのポインタとしてそれらを渡すことができ、これらの変数はポインタになりたいいけない:

int main() { 
    unsigned int ten = (int) 10; 
    unsigned short a = (short) 89; 
    unsigned int p = (int) 1; 
    unsigned short q = (short) 10; 
    unsigned short s = (short) 29; 

    function(ten, &a, &p, &q, &s); 

    return 0; 
} 

decode_instructionの詳細情報がなければ、これが正しい形式であれば伝えるのは難しいです。それは実際にその機能が何をするかに依存します。

関連する問題