0

下記のようなコードの関数呼び出しと配列インデックスを含むステートメントに出くわしました。このステートメントでは、s = o.init()[-1]はa1[0]の値を返します。私はそれがどのように機能するか、このステートメントo.init()[-1]が何をするのか、0.init()が関数を呼び出すことを知っていますが、[-1]は何を指定するのかという概念が明確ではありません?plsはこのクエリを解決するのに役立ちますか?

#include<iostream>
using namespace std;

class a
{
  char a1[1000];

  public:
  a()
 {
    a1[0]='a';
 }
  char* init()
  {
     cout<<"value of a1 is"<<a1<<endl;
     return a1+1;
  }
};

int main()
{
   a o;
  char s;
  s=o.init()[-1];


cout<<"value of s  is"<<s<<endl;
}
4

3 に答える 3

2

init()へのポインタを返しますa1[1]o.init()[-1];そのポインタから1を引いて(つまり、へのポインタを取得しますa1[0])、それを逆参照すると、が取得されますa1[0]

于 2013-03-25T08:54:12.180 に答える
1

initはchar*を返すため、init()[-1]はメモリ内でポインタを1文字後方に移動します。

次のように想像してみてください。

char* arr = o.init();

その後:

arr--;

ご覧のとおり、関数はarray + 1を返すため、「a」、つまり最初の値を取得するには、1つ前に戻る必要があります。

于 2013-03-25T08:53:49.957 に答える
1

メソッドの戻り値はですchar*。したがって、インデックス演算子はアドレスから1を減算し、それを逆参照します。

于 2013-03-25T08:53:56.897 に答える