C/C++指针
最近工作不紧,抽空看了下C、C++的指针,发现了一些平时没注意到的指针用法和问题。
1、指针引用
void func1(MYCLASS* &pBuildingElement);
乍一看,怪怪的,看了下解释,细想一下和指针的指针类似:
void func1(MYCLASS** pBuildingElement);
看下面的例子:
...
MyClass* p = new MyClass;
func1(p);
...
func1的定义如下:
void func1(MyClass* pMyClass)
{
...
pMyClass = //其他对象的指针
...
}
第二条语句func1(p);在函数过程中只修改了pMyClass的值。并没有修改调用者的变量p的值。假设要在func1中修改p的值,现在就有两种方法:一是利用指针的指针,二是利用指针的引用。
以上代码可修改为:
//指针的指针
...
MyClass* p = NULL;
func1(&p);
...
func1的定义如下:
void func1(MyClass** pMyClass)
{
...
*pMyClass = new MyClass;
...
}
//指针的引用
...
MyClass* p = NULL;
func1(p);
...
func1的定义如下:
void func1(MyClass* &pMyClass)
{
...
pMyClass = new MyClass;
...
}
其实,它和前面指针的指针是一码事,只是语法有所不同。传递的时候不用传p的地址,而是直接传p本身。
至于说什么场合要使用这种方法,我会说,极少。MFC在其集合类中用到了它--例如,CObList,它是一个Cobjects指针列表。
Class CObList : public Cobject
{
……
// 获取/修改指定位置的元素
Cobject*& GetAt(POSITION position);
Cobject* GetAt(POSITION position) const;
};
这里有两个GetAt函数,功能都是获取给定位置的元素。区别何在呢?
2、数据指针
常规数据指针和成员数据指针
这里主要涉及成员数据指针的内容。
struct MyStruct{
int value;
int key;
}
struct MyStruct me;
struct MyStruct* pMe;
定义成员数据指针:
int MyStruct::* pMV = &MyStruct::value;
int MyStruct::* pMK = &MyStruct::key;
这种指针的用途是用于取得结构成员在结构内的地址。我们可以通过该指针来访问成员数据:
int value = pMe->*pMV; // 取得pMe的value成员数据。
int key = me.*pMK; // 取得me的key成员数据。
那么,在什么场合下会使用到成员数据指针呢?
确实,成员指针本来就不是一种很常用的指针�
相关文档:
命令行界面的程序,通常都需要输入命令行参数帮助程序执行。main是最典型的此类应用,main的参数之前都被忽略掉了。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int count;
printf("The command line has %d arguments:\n", ......
本试题仅用于考查C++/C程序员的基本编程技能。内容限于C++/C常用语法,不涉及数据结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。
笔试时间90分钟。请考生认真答题,切勿轻视。
一、请填写BOOL , float, 指针变量 与“零值”比较的 i ......
(一)整数符号的陷阱
(二)浮点数的本质
(三)堆栈的内存管理结构
(四)符号解析
(五)对齐和总线错误
(六)函数指针
(七)虚函数的实现机理
(八)引用的实现机理
(九)虚拟继承对象的内存结构
(十)混合编程时的初始化顺序
(十一)数组和指针的异同 ......
菜单和加速键密切地联系在一起。这两种资源类型联手协作,让用户能更容易地完成任务。大家都知道菜单是什么——它是分层命令结构的物理表示。加速键提供该结构的快捷方式,以提高用户操作的速度。例如,要创建一个新文件,通常用File | New(文件|新建)命令或CTRL-N加速键,两种方法可以产生相同的结果。
Visua ......