C指针的问题

时间:2011-02-28 19:37:08

标签: c linux pointers

我需要在我的作业中使用指针来获得完全的功劳。

指针有问题。我的作业是模拟兔子和海龟种族。比赛从1开始,到70结束。根据已经过去的时间百分比,兔子和乌龟可能会快速或缓慢地前进,可能会在山上掉落一小部分或大部分,或者兔子可能睡着了。当一个人达到70并且位置不能为负时(最后时间和ifs),比赛结束。开关完成与运动相关的所有事情。您会注意到,如果他们在道路上前进或下降,那么交换机中的值就不存在了。

我的问题在于指针。我必须使用它们,他们就是我的意思!请帮忙:

代码:

#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

感谢您提前提供任何帮助

4 个答案:

答案 0 :(得分:2)

我认为你只想*ptrt=post+3;等而不是&post。使用&号运算符获取变量的地址,因此该行当前所说的是“将ptrt指向的值设置为等于超过post地址的3个字节的地址。您要说的是“将ptrt指向的值设置为等于post + 3的值。”

答案 1 :(得分:1)

符号int * ptrt表示* ptrt是一个int ...(或者ptrt是一个指向int的指针......它是相同的)。 在这里,您尝试将指向int(&amp; post + i)的指针分配给int(* ptrt)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

很多要点: 1 - 为什么需要指针?你可以使用整数......它们非常简单。 2 - &amp; var返回var的内存地址的指针。记在心上。除非您想访问该内存地址中的内容,否则不能执行&amp; var + 5。 3 - * var = x在存储器中设置的地址存储在var的x值中。 var仍具有相同的值,但存储在var中寻址的内存中的变量将发生变化。