C++ 指针的偏移 The offset of a pointer in C++

2014-04-07 00:35:49 · 作者: · 浏览: 127

  C++ 指针的偏移

  A problem from my friend, what's the result of the following code:

  class str{

  public:

  int x;

  char s[0];

  };

  class foo{

  public:

  str * p;

  };

  int main() {

  foo f = {0};

  str* p1 = NULL;

  if (f.p->s){

  printf("%d\n", f.p->s);

  }

  return 0;

  }

  This sentence sets p to NULL:

  foo f = {0};

  f.p is a pointer of str, so f.p is an offset. I.e., f.p->s = base address + 4

  So the result is 4