对象名是不是一个指针?

来源:百度知道 编辑:UC知道 时间:2024/05/21 16:57:50
我知道数组名是一个指针。
那么,我想问一问,
对象名是不也是一个指针?
CDC::FillRect
void FillRect( LPCRECT lpRect, CBrush* pBrush );

Parameters

lpRect

Points to a RECT structure that contains the logical coordinates of the rectangle to be filled. You can also pass a CRect object for this parameter.

pBrush

Identifies the brush used to fill the rectangle.

两个形参有啥不同?
都是指针吗?

lpRect,*pBrush都是对象的地址,该地址指向堆中的某种地方区别是:lpRect这个对象变量在栈中,随着程序段的结束,对象会自动销毁(出栈).pBrush指针,真实的对象变量(*pBrush)在堆中,因此当程序段结束,如果不执行delete,pBrush指针被销毁,但是它指向的对象将成为孤魂野鬼 (内存泄露) 对象名是一个引用,与指针不同,引用不是直接指向对象所在的内存位置,但是它包含了内存地址的信息. 总的来说我们可以把对象名当作是指针,而不就是指针.

光从编程角度来说,在Java里面对象名是一个引用(感觉和指针有点区别),在C++里面就是个实体,所以要改动某个对象里面的东西,前面加个“&”成为引用是少不了的
例如:void fillWithInteger(Object &a);
最后说一下指针,同意二楼说法,害了一代人,功能上和引用很像,不过老是出一些诸如越界之类的问题,使用起来也老要在变量前面加一个“*”,实在用起来不爽(当然不排除某些高手仍旧把它用的出神入化)

指针害了一代编程人,其实int i, i也是一个指针

是的

是的