繁体   English   中英

指针运算不起作用

[英]Pointer Arithmetic not working

我正在尝试进行一些指针运算,但出于某种原因,指针在退出循环后没有保留地址的更改。

我的输出是重复打印而不改变的数组(整个数组)的指针地址。

它应该是打印一个值的地址,然后在掷骰子后将指针在数组中向前移动那么多位,并在下次打印时通过。

编辑:我不是在写一个链表。 可以在此处找到我正在尝试做的确切示例: TutorialsPoint.com | C - 指针算术然而,虽然我可以运行该示例代码并使其完美运行,但我的代码每次都失败。

编辑 2:要求提供完整的源代码

项目名称.cpp

#include "TableOfContents.h"
void main()
{
FILE *fp;       //file reader
char board[100] = "  mHk nH l B He Flq p H  hByHlho H B  jr HFB ir j H  F ku gd  H pjB mH x  BF i H  m oB HlHFBhoH BB ";
char *p1, *p2; // player 1 and player 2
int turn = 1;
srand(time(NULL));   // should only be called once

              //    int z[10]; // example of how to make an array
/*
fp = fopen("C:\\Users\\ritol\\Documents\\cities1.txt", "r");
inputLine = "";
inputP = &inputLine; // set inputP to the address for inputLine
*/
p1 = &board[0];
p2 = &board[0];

fp = fopen("C:\\Users\\ritol\\Documents\\outputGameBoard.txt", "w");

while (turn <= 45) //
{
    //output the current turn

    //call the function move for p1
    move(*p1, *p2, turn, board);

    turn++;//TODO: only put this in it's correct place

    //call the function move for p2
    move(*p1, *p2, turn, board);
    //increment turn
    turn++;

    //call output function to output current board to disk file
    output(board, p1, p2, fp);
}

//determine and output the winner

//Wait
scanf("%d", &turn);

}

头文件:

#pragma once
#ifndef TOC
#define TOC
#define _CRT_SECURE_NO_DEPRECATE 
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
/*
Outputs the current game board to file
*/
void output(char *board, char *p1, char *p2, FILE *myfile);

/*
Receives 
*p1 - player 1 pointer
*p2 - player 2 pointer
turn - the argument to determine which player to move
*board - the size of the board
Outputs the player number, randomly generates a move from 1-6 for the player,
determines if the player has landed on an event, and moves accordingly,
checks and handles player collison,
outputs the amount the player moved and where they are now
*/
void move(char **p1, char **p2, int turn, int boardSize);

#endif 

力学.cpp

#include "TableOfContents.h"

void output(char *board, char *p1, char *p2, FILE *myfile)
{
//the loop will exist once  you have reached \0
fprintf(myfile, "%s\n", board);
//TODO: show the player locations 
}


/*
Moves a player and outputs the result of each players move
*/
void move(char **p1, char **p2, int turn, int boardSize)
{
//roll the dice

int r = (int) (1 + (rand() % 5));      // returns a pseudo-random integer     from 1 to 6

//REMOVE: tracer code
if (r > 6 || r == 0) printf("The dice have sinned.\n");

//Apply the dice roll based on whose turn it is
if (turn % 2 == 1)//Odd turn; Player 1's turn
{
    printf("%p ", p1 + r);
    *p1++;
}
else if (turn % 2 == 0) //Even turn; Player 2's turn
{
    printf("%p\n", p2);
    p2 += r;
}
}

首先,您的 p1 和 p2 变量不会在对 move 函数的连续调用中发生变化,因为您是按值传递指针。 请参阅按引用传递与按值传递之间的区别是什么?

其次,您需要解决代码中的其他几个错误。 这条线就是其中之一。 它不符合你的评论所说的。

int r = 1 + (rand() % 5);      // returns a pseudo-random integer from 1 to 6

这整件事都是因为我误读了我应该做的事情。 我应该返回一个字符指针,而不是函数为空。

我现在很尴尬,我不介意将其删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM