2011-02-28 111 views
0

我需要显示使用指针为我的作业,以获得完整的功劳。问题与C指针

我有一个指针的问题。我的作业是模拟兔子和乌龟种族。比赛从1开始,在70完成。根据已经过去的时间百分比,兔子和乌龟可能会快速或缓慢地前进,可能会掉下一小块或一大块山,或者兔子可能会睡着。当一个人达到70岁时,比赛结束,并且该位置不可能是负面的(上一次和如果)。开关完成与运动有关的所有事情。你会注意到,如果开关前进或掉下道路,开关的价值就会被忽视。

我的问题是与指针。我必须使用他们,他们是我**!请帮助:

代码:

#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

我认为这是因为在尝试操纵它们之前需要对它们进行去偏移。 – clamchoda

+0

开关中所有'posl'和'post'之前的'&'字母不需要。 – osgx

+0

你为什么使用指针? – outis

回答

2

我想你想只是*ptrt=post+3;等,而不是&post。使用&符号运算符获取变量的地址,所以线路当前所说的是“将ptrt指向的值设置为等于地址post之后的3个字节的地址,而您想说的是”set值,在ptrt点是等于post + 3”

+0

完美!有效! –

0

你不想写:* PTRT =交+3;或者ptrt = & post + 3;而不是* ptrt = & post + 3; ? & post是变量post的地址,post是变量post的值。

1

表示法int * ptrt表示* ptrt是一个int ...(或者说ptrt是一个指向int的指针......也是一样)。 在这里,你想一个指针赋给一个int(&后+ I)为int(* PTRT)

0

许多点的值:? 1 - 为什么你需要指点你可以只使用整数...他们是很简单的 2 - & var var返回一个指向var的内存地址的指针请记住,除非你想访问内存地址中的某些东西,否则你不能执行& var + 5 3 - * var = x在存储地址中设置var的值的 X。 var仍然具有相同的值,但存储在由var指定的内存中的变量将会更改。