1

このコードは C で合法ですか? & 記号でエラーが発生します。このプロセスを簡単にするために、Ubuntu 用の Eclipse C/C++ IDE を使用しています。

void is_done(int &flag , char* ptr)
{
    int i=0;
    for(i=0;i<3;i++)
    {
        if(*ptr[i][0]==*ptr[i][1]==*ptr[i][2]||*ptr[0][i]==*ptr[1][i]==*ptr[2][i])
        {
            flag=1;
            return;
        }
    }
    if(*ptr[0][0]==*ptr[1][1]==*ptr[2][2]||*ptr[0][2]==*ptr[1][1]==*ptr[2][0])
    {
        flag=1;
        return;
    }
}

GCC は私にエラーを与えます:

expected ‘;’, ‘,’ or ‘)’ before ‘&amp;’ token
ipttt.c /OS line 7  C/C++ Problem

私は本当にこのエラーを理解していません。

4

4 に答える 4

1

宣言で文字を使用した参照&は C++ のものです。C で「オブジェクト」を参照として渡すには、ポインターを使用する必要があります。

void is_done(int *flag , char* ptr)
{
    ...

    *flag = 1;

    ...
}
于 2013-02-18T13:59:21.217 に答える
1

あなたが望んでいたのは、次のような int へのポインタを渡すことでした:

void is_done(int *flag , char* ptr)
{
            // Then you must deference the variable to set the value
    *flag = 1; // or whatever value you want

次に、次のようにフラグを指定して関数を呼び出します。

int main()
{
   int flag = 0;
   char * ptr = NULL;
   ...
   is_done(&flag, ptr);  // Note that's not "reference" here, that's the address of
                         // your local flag variable

もちろん、ポインターを使用することもできますが、「参照渡し」をしようとしていたので、最初からコードでポインターを使用していなかったと思います。

于 2013-02-18T14:01:49.997 に答える