#include <stdio.h>
class A
{
public:
int i;
void f();
};
struct B
{
int i;
};
void A::f()
{
i = 20;
printf("A::f()--&i=%p\n", &i);
//printf("this=%p\n", this);
}
void f(struct B* p)
{
p->i = 20;
}
int main(void)
{
A a;
A aa;
a.i = 10;
printf("&a=%p\n", &a);
printf("&a.i=%p\n", &(a.i));
//a.f();
class A
{
public:
int i;
void f();
};
struct B
{
int i;
};
void A::f()
{
i = 20;
printf("A::f()--&i=%p\n", &i);
//printf("this=%p\n", this);
}
void f(struct B* p)
{
p->i = 20;
}
int main(void)
{
A a;
A aa;
a.i = 10;
printf("&a=%p\n", &a);
printf("&a.i=%p\n", &(a.i));
//a.f();
}
发现&a);和&a);A::f()--&i=地址一样的。
结论:对象a里面只有成员变量,无其他。f()函数里面得到的也是a.i的地址。
主函数变一下:
int main(void)
{
A a;
A aa;
a.i = 10;
printf("&a=%p\n", &a);
printf("&a.i=%p\n", &(a.i));
a.f();
printf("&aa=%p\n", &aa);
aa.f();
}
}
aa的地址与a不一样了!不同对象调用不同函数,函数里指哪个对象调用的。
This是C++默认的指针natural local variable,如下:
#include <stdio.h>
class A
{
public:
int i;
void f();
};
struct B
{
int i;
};
void A::f()
{
i = 20; //or 写成 this->i = 20; c++默认就这样赋值
printf("A::f()--&i=%p\n", &i);
printf("this=%p\n", this);
}
void f(struct B* p)
{
p->i = 20;
}
int main(void)
{
A a;
A aa;
a.i = 10;
printf("&a=%p\n", &a);
printf("&a.i=%p\n", &(a.i));
a.f();
//printf("&aa=%p\n", &aa);
//aa.f();
}