Code1010
2018-03-22 10:21
采纳率: 100%
浏览 751

c++关于指针数组的问题 求解答!

 #include<iostream>
#include<cstring>
using namespace std;

bool isfake(char c,bool baby)
{
    int i;
    for(i=0;i<3;i++)
    {

    char *pleft,*pright;
        if(baby)
        {
            pleft=left[i];
            pright=right[i];
        }else
        {
            pleft=right[i];
            pright=left[i];
        }

        switch(result[i][0])
        {
            case 'u':
                if(strchr(pright,c)==NULL)
                {
                    return false;
                }
                break;
            case 'e':
                if(strchr(pleft,c)==NULL||strchr(pright,c)==NULL)
                {
                    return false;
                }
                break;
            case 'd':
                if(strchr(pleft,c)==NULL)
                {
                    return false;
                 } 
                 break;
        }
    }
    return true;
}
int main()
{
    int n;
    cin>>n;
    char left[3][7];
char right[3][7];
char result[3][7];
    while(n--)
    {

        for(int j=0;j<3;j++)
        {
            cin>>left[j]>>right[j]>>result[j];
        }
        for(char c='A';c<='L';c++)
        {
            if(isfake(c,true))
            {
                printf("%c is the counterfeit coin and it is light.\n",c);
                break;
            }else if(isfake(c,false))
            {
                printf("%c is the counterfeit coin and it is heavy.\n",c);
                break;
            }
        }

    }

    return 0;
}

就是为什么会这样啊,找着一个老师的结题代码写的,为什么指针不能指向数组呢?
图片说明
图片说明
自己写一个不是可以指向吗 为什么第一个代码就不行呢 求解答谢谢了!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • 忽见一刘 2018-03-22 11:12
    已采纳

    #include
    using namespace std;
    char left[3][7],right[3][7],result[3][7];
    int isfake(char c,int baby){
    int i;
    for(i=0;i {
    char *pleft,*pright;
    if(baby)
    {
    pleft=left[i];
    pright=right[i];
    }else
    {
    pleft=right[i];
    pright=left[i];
    }
    switch(result[i][0])
    {
    case 'u':
    if(strchr(pright,c)==NULL)
    { return false;
    }
    break;
    case 'e':
    if(strchr(pleft,c)==NULL||strchr(pright,c)==NULL)
    {
    return false;
    }
    break;
    case 'd':
    if(strchr(pleft,c)==NULL)
    {
    return false;
    } break;
    }
    }
    return true;
    }
    int main(){
    int n;
    cin>>n;
    }

    点赞 评论
  • 忽见一刘 2018-03-22 10:30

    把main下面的声明提到全局,就是放在include下面

    点赞 评论
  • 忽见一刘 2018-03-22 10:53

    #include
    using namespace std;
    char left[3][7];
    char right[3][7];
    char result[3][7];
    bool isfake()
    {
    ...
    }
    int main(){
    ...

    }
    就这样

    点赞 评论
  • 莫过于此_ 2018-03-22 10:57

    大哥,你main()函数里面定义的数组是局部变量,isfake()函数前面没有定义left[i] 和 right[i] 数组,指针肯定没指向三;你想程序能正确运行,把main函数里面定义的数组放在全局就行了

    点赞 评论
  • mianwu8390 2018-03-22 10:58

    你写的例子是建立在二维数组上,二维数组的b[1]是一个地址,所以s=b[1]可以实现。但是上面的pright=right[i];pright是字符指针,right[i]是二维数组代表一行的地址,起码要写一个形如pright=right[i][j]类似的句式

    点赞 评论
  • Code1010 2018-03-22 11:25

    改好了 把数组改成大写就好了 不知道为什么 谢谢大家了 包括那位大哥

    点赞 评论
  • -iostream- 2018-03-22 11:29

    你的left和right数组都没有作为参数提供给isfake()函数,那isfake()怎么能够使用它们呢?
    解决方法:
    一,给isfake()增加两个参数char* left,char* right.
    二,将left 和right 声明为全局变量.

    点赞 评论

相关推荐 更多相似问题