2017-08-29 8 views
0

が、私は両方のケースが同じであると思っ構造ポインタアドレスの割り当ては

struct ip_node { 
     char arr[6]; 
}; 

typedef struct ip_node ip; 

ip ip1={"abcde"}; 

case 1: // it is running without error 
ip *ip2=&ip1; 

case 2: // it is giving error 
ip *ip2; 
ip = &ip1; 

下のような構造を持っている以下の に構造体へのポインタに私の疑問を明確にしてくださいエラーが発生します。

なぜ2番目のケースでエラーが発生しますか?

+1

C!= C++。 1つだけのタグ。 – tambre

+4

'ip'は変数ではなく、型名です。あなたは 'ip2 = &ip1;'を意味しますか? –

+0

2番目のケースでは、ip2 =&ip1と書くべきです。 –

答えて

2

変数のアドレスを正しいポインタに割り当てることはまったく同じことです。あなたはただタイプミスです。

変更

ip = &ip1; 

あなたが入力に割り当てる値を試してみました

ip2 = &ip1; 

へ。

Here is the correct example.

+0

私はgccをubuntu OSで使用しています。実行すると、次のエラーが発生します。警告:「IP2」 注相反するタイプ:「IP2」[-Wimplicit-INT] エラーの宣言で「INT」のタイプのデフォルト:データ定義は&ip1; ^ 警告= IP2いかなるタイプまたはストレージクラス を有していない前'ip2'の宣言はここにありました ip * ip2; ^ 警告:初期化するとキャストのないポインタから整数が生成される[-Wint-conversion] ip2 = &ip1; – RatheeshT

+0

@RatheeshT「私の答えに正しい例はありますか」を開いて見てください。 –

+0

あなたが投稿したコードが動作しています。あなたのコードに1つの変更を加えました。構造体ポインタの代入を、ローカルではなくグローバルで、同じエラーを与えるように変更しました。修正されたコードは、参考の#include の#include 構造体ip_node {[6] ARR チャーのためにここにあります。 }; typedef struct ip_node ip; ip ip1 = {"abcde"}; ip * ip2 = &ip1; ip * ip3; (void *)&ip1、(void *)ip2、(void *)ip3 = &ip1; int main() { printf( "&IP:%p == ip2:%p == ip3:%p \ n" )ip3); } – RatheeshT

1
ip = &ip1; 

やっと同じように無効です。

int = 1; 

あなたはそのタイプipの名前を必要とし、あなたがやっているので、その型がポインタでなければなりません&ip1;

ip* a2 = &ip1; 
関連する問題