2011-02-28 11 views
0

フルクレジットを受け取るために私の宿題のためのポインタの使用を示す必要があります。Cポインタの問題

私はポインタに問題があります。私の宿題はウサギとカメの競争をシミュレートすることです。レースは1で始まり、70で終了する。時間のパーセンテージに応じて、ウサギとカメは速くまたは遅く進んでもよく、少数または多数の山の中に落ちるかもしれないし、ウサギが眠っているかもしれない。レースは70歳になると終了し、ポジションはマイナスにはなりません(最後のwhileとifs)。スイッチは動きに関連するすべてを行います。スイッチが進んでいるか、道路から外れている場合は、スイッチの内側の値のために気づくでしょう。

私の問題はポインタにあります。私はそれらを使用しなければならないし、彼らはf **私です!助けてください:

コード:

#include <stdio.h> 
int main(void) 
{ 

    int x, post, posl, num1, num2; 
    int *ptrt; 
    int *ptrl; 
    ptrt=&post; 
    ptrl=&posl; 
    printf("BANG!!!!\nY ARRANCAN\n"); 
    post=posl=1; 
    do{ 
     num1 = rand() % 10; 
     num2 = rand() % 10; 

     switch (num1){ 
      case '0': *ptrt=&post+3; break; 
      case '1': *ptrt=&post+3; break; 
      case '2': *ptrt=&post+3; break; 
      case '3': *ptrt=&post+3; break; 
      case '4': *ptrt=&post+3; break; 
      case '5': *ptrt-=&post+6; break; 
      case '6': *ptrt-=&post+6; break; 
      case '7': *ptrt+=&post+1; break; 
      case '8': *ptrt+=&post+1; break; 
      case '9': *ptrt+=&post+1; break; 
     } 
     switch (num2){ 
      case '2': *ptrl=&posl+9; break; 
      case '3': *ptrl=&posl+9; break; 
      case '4': *ptrl=&posl-12; break; 
      case '5': *ptrl=&posl+1; break; 
      case '6': *ptrl=&posl+1; break; 
      case '7': *ptrl=&posl+1; break; 
      case '8': *ptrl=&posl-2; break; 
      case '9': *ptrl=&posl-2; break; 
     } 

     if (post<1) 
     post=1; 
     if (posl<1) 
     posl=1; 

    }while (*ptrt<70||*ptrl<70); 
    printf("tortuga= %d\nliebre=%d\n" ,post ,posl); 

    return 0; 
} 

コンパイラの出力:事前に任意の助け

tarea.c: In function ‘main’: 
tarea.c:17: warning: assignment makes integer from pointer without a cast 
tarea.c:18: warning: assignment makes integer from pointer without a cast 
tarea.c:19: warning: assignment makes integer from pointer without a cast 
tarea.c:20: warning: assignment makes integer from pointer without a cast 
tarea.c:21: warning: assignment makes integer from pointer without a cast 
tarea.c:22: error: invalid operands to binary - (have ‘int’ and ‘int *’) 
tarea.c:23: error: invalid operands to binary - (have ‘int’ and ‘int *’) 
tarea.c:24: warning: assignment makes integer from pointer without a cast 
tarea.c:25: warning: assignment makes integer from pointer without a cast 
tarea.c:26: warning: assignment makes integer from pointer without a cast 
tarea.c:29: warning: assignment makes integer from pointer without a cast 
tarea.c:30: warning: assignment makes integer from pointer without a cast 
tarea.c:31: warning: assignment makes integer from pointer without a cast 
tarea.c:32: warning: assignment makes integer from pointer without a cast 
tarea.c:33: warning: assignment makes integer from pointer without a cast 
tarea.c:34: warning: assignment makes integer from pointer without a cast 
tarea.c:35: warning: assignment makes integer from pointer without a cast 
tarea.c:36: warning: assignment makes integer from pointer without a cast 

おかげ

+1

私は、あなたがそれらを操作しようとする前に、あなたがそれらをderefferenceする必要があるためだと思う。 – clamchoda

+0

スイッチのすべての 'posl'と' post'の前の '&'文字は不要です。 – osgx

+0

なぜポインタを使用していますか? – outis

答えて

2

intにint型(&ポスト+ I)にポインタを割り当てるしようとしています。アンパサンド演算子を使用すると変数のアドレスが使用されるので、現在の行では「ptrtのアドレスは、アドレスの3バイト先のアドレスをpostに設定します。代わりに「set ?でptrtポイントがpost + 3」

+0

完璧!出来た! –

0

がお書きたくありませんでした:* ptrt =ポストを+3;またはptrt = &ポスト+3; * ptrt = &ポスト+3; ? & postは変数postのアドレスで、postは変数postの値です。

1

表記int * ptrtは、* ptrtがint ...であることを意味します(または、ptrtはint ...へのポインタです)。ここで 、私はあなただけ*ptrt=post+3;などの代わり&postのたいと思います(* ptrt)

0

多くの点の値と等しくなるようにすること値:。 1 - あなたはポインタを必要とするなぜあなたはint型を使用することができます...彼らは非常に単純です 2 - &あなたがそのメモリアドレスに何かにアクセスしたいのでなければ& var + 5を実行することはできません 3 - * var = xはvarに格納されたメモリアドレスに設定されますの バツ。 varは同じ値を持ちますが、varで指定されたメモリに格納されている変数は変更されます。