int main()
{
double x = 10.08;
double *p;
p = &x;
printf("value of pointer is %d\n",p);
*p=&x;//error line
printf("value of x, *p = %lf\n",x);
return 0;
}
私がint型(int x、int * p)の場合、それは正常に動作します。しかし、ダブルではない、なぜ?ポインタの互換性のない型エラー
int main()
{
double x = 10.08;
double *p;
p = &x;
printf("value of pointer is %d\n",p);
*p=&x;//error line
printf("value of x, *p = %lf\n",x);
return 0;
}
私がint型(int x、int * p)の場合、それは正常に動作します。しかし、ダブルではない、なぜ?ポインタの互換性のない型エラー
*p
は、タイプがdouble
であり、 &x
のタイプはdouble *
です。それらは互換性がありません。ところで
、変換%p
使用し、ポインタ値をプリントアウトする:
printf("value of pointer is %p\n", p);
void *へのキャスト:printf( "ポインタの値は%p \ n"、(void *)p); ' –
*p
タイプの二重です。 &x
は、ポインタを二重にする型です。なぜあなたはそれらが互換性があると思いますか?
int
であっても、警告をオンにして警告を出すと、あなたのコンパイラはそのことについて不平を言うことを期待しています。
これは* pをので、Cに従うべきではないですが、それはxの値を意味inturnsし、x値のアドレスを格納したいが、あなたはポインタとしてそれを宣言していない
*p = &x with *p = (unsigned int) &x \\ this works
*p = &x it means x = &x ; Not a syntax to follow
を交換したが通常の変数です。
ただしインクルードは、あなたが任意のエラーが、
non portable assigment
は、私は深く根を知らないが、私の調査のためとして、私はポインタが他のいくつかの形式のアドレスが、ショーを救う推測することを示す警告を取得いけないint型で私たちの整数形式
int x;
int *p;
p = &x ;
*p = &x ; warning non portable assignment replace with *p = (unsigned int) &x
using typecasting (unsigned int) coverts the address format to integer format
I guess So . May be the address format and integer format are different
Thats why you cant assign address to a variable unless it is typecasted
but pointers dont need them because as they are invented to store the address
This is what i think from my investigation
しかし、私は非常に上記の構文に従っていないお勧めします。
人々は、私は、全Cの初心者くさいよ
なぜ私は-1 MR MRを取得しましたか? – niko
のvoidポインタのために行く代わりに、常に二重のポインタを使用してはいけません。つまり、 '* p =&x'では' p'を逆参照して 'x'へのポインタに代入しているので問題があります。私はこれが 'int'と' double'との関係がないと信じていません –
そのコード行は何を期待していますか? (ヒント:おそらく間違っていると思います。ポインタの宣言とポインタの宣言と単項 '*'演算子の使用の違い) –
* p = x;エラーラインに?あなたはpの指すアドレスにxの値を格納しようとしていますか? –