【问题标题】:Warning says comparison between pointer and integer in array assignment警告说数组赋值中指针和整数之间的比较
【发布时间】:2014-04-03 09:46:49
【问题描述】:
char playingfield[4][8] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
void dropbomb(void)
{
    int row = 3 , column = 0;
    for(row;row>=0;row--)
    {
        for(column; column<=8;column++)
        {
            if(playingfield[row][column] == "#")
            {
                playingfield[row][column] = "$";
                OledSetCursor(column,row);
                OledPutChar(playingfield[row][column]);
            }
            else if(playingfield[row][column] =="$")
            {
                playingfield[row][column] = " ";
                OledSetCursor(column,row);
                OledPutChar(playingfield[row][column]);
                if(row<3)
                {if(playingfield[row+1][column]=="$")
                    playingfield[row+1][column]="*";
                else if(playingfield[row+1][column]=="&")
                    playingfield[row+1][column]=".";
                else if (playingfield[row+1][column]=="'")
                    playingfield[row+1][column]=",";
                }
            }
            else if(playingfield[row][column]==",")
                stage = "finished";
            else if(playingfield[row][column]=="%")
            {
                playingfield[row][column] = "&";
                OledSetCursor(column,row);
                OledPutChar(playingfield[row][column]);
            }
            else if (playingfield[row][column]=="&")
            {
                playingfield[row][column] = " ";
                OledSetCursor(column,row);
                OledPutChar(playingfield[row][column]);
                if(row<3)
                {if(playingfield[row+1][column]=="$")
                    playingfield[row+1][column]="+";
                else if(playingfield[row+1][column]=="&")
                    playingfield[row+1][column]="/";
                else if (playingfield[row+1][column]=="'")
                    playingfield[row+1][column]="-";
                }
            }
            else if (playingfield [row][column]=="*")
            {
                playingfield[row][column] = "$";
                OledSetCursor(column,row);
                OledPutChar(playingfield[row][column]);
                if(row<3)
                {if(playingfield[row+1][column]=="$")
                    playingfield[row+1][column]="*";
                else if(playingfield[row+1][column]=="&")
                    playingfield[row+1][column]=".";
                else if (playingfield[row+1][column]=="'")
                    playingfield[row+1][column]=",";
                }
            }
            else if (playingfield[row][column]=="+")
            {
                playingfield[row][column] = "&";
                OledSetCursor(column,row);
                OledPutChar(playingfield[row][column]);
                if(row<3)
                {if(playingfield[row+1][column]=="$")
                    playingfield[row+1][column]="*";
                else if(playingfield[row+1][column]=="&")
                    playingfield[row+1][column]=".";
                else if (playingfield[row+1][column]=="'")
                    playingfield[row+1][column]=",";
                }
            }
            else if(playingfield[row][column] == "-")
            {
                score=score+1;
                playingfield[row][column] == "'";
            }
            else if (playingfield[row][column] == ".")
            {
                playingfield[row][column] = "$";
                OledSetCursor(column,row);
                OledPutChar(playingfield[row][column]);
                if(row<3)
                {
                if(playingfield[row+1][column]=="$")
                    playingfield[row+1][column]="+";
                else if(playingfield[row+1][column]=="&")
                    playingfield[row+1][column]="/";
                else if (playingfield[row+1][column]=="'")
                    playingfield[row+1][column]="-";
                }
            }
            else if (playingfield[row][column] == "/")
            {
                playingfield[row][column] = "&";
                OledSetCursor(column,row);
                OledPutChar(playingfield[row][column]);
                if(row<3)
                {
                if(playingfield[row+1][column]=="$")
                    playingfield[row+1][column]="+";
                else if(playingfield[row+1][column]=="&")
                    playingfield[row+1][column]="/";
                else if (playingfield[row+1][column]=="'")
                    playingfield[row+1][column]="-";
                }
            }
        }
    }

我试图一个一个地遍历这个数组中的单元格。但是,对于涉及“playingfield [row] [column]”的任何地方,它告诉我指针和整数之间的比较。还有一个警告说,Assignment Makes Integer from pointer without a cast.

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    字符串字面量,如"#" 实际上是指向数组中第一个字符的指针。你在做什么,例如

    playingfield[row][column] == "#")
    

    charchar * 进行比较。

    我认为您的意思是使用字符文字:

    playingfield[row][column] == '#')
    

    注意从双引号 " 到单引号 ' 的变化。


    当你编译它时,你会遇到一个更严重的错误:查看column 循环条件,它包含索引8,它超出了数组的范围(它是数组中的第九个索引)。

    【讨论】:

      【解决方案2】:

      将双引号中的字符串文字(如 "$")更改为单引号中的字符文字 '$'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-25
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多