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个回答

#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;
}

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

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

}
就这样

qq_39301152
Code1010 我试过了还是不行啊
接近 2 年之前 回复

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

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

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

qq_39301152
Code1010 回复qq_35679818: 原来如此 嗯嗯
接近 2 年之前 回复
qq_35679818
忽见一刘 left,right是c++预定义的东西,重名了
接近 2 年之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问