翁恺c++

#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();

}


发现&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();
}





猜你喜欢

转载自blog.csdn.net/hk121/article/details/80301257