c - C指针的问题

标签 c linux pointers

我需要在作业中展示指针的使用情况才能获得满分。

我对指针有疑问。我的作业是模拟兔子和乌龟赛跑。比赛从 1 点开始,到 70 点结束。根据所用时间的百分比,兔子和乌龟可能前进得快或慢,可能会从山上掉下一小部分或很多,或者兔子可能睡着了.当一个人到达 70 并且位置不能为负时,比赛就结束了(last while 和 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

提前感谢您的帮助

最佳答案

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

关于c - C指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5146703/

相关文章:

c - 如何将 float 数组传递给以 unsigned char 指针为参数的函数?

c - pthread 的堆栈大小如何影响内存使用?

C++ - RtMidi 不向输出端口发送任何内容

c - 使用 char 指针时如何解决代码错误

c - 为什么此代码片段会出现段错误

c - 进行循环工作

c - 自动调整显示类型

linux - 删除 linux 目录中的所有文件夹和文件,除了一个文件夹和该文件夹中的所有内容

linux - 安装 ARPACK 时 makefile 的问题

c++ - 为什么内存地址是偶数?