数据结构与算法分析 c++描述 读书笔记(2)

int main( )
{
	IntCell *m;
	m = new IntCell(10);
	cout << m->read() << endl;
	delete m;
    return 0;
}

使用之前的IntCell类。

1. 使用未初始化的指针通常会破坏程序,因为这样的指针可能会访问不存在的存储地址。解决办法是定义指针和初始化放到一起。

2. 在定义m指针时,可以选择m= new IntCell();但是考虑到可能会出现编译器误认为IntCell是函数的情况,所以一般还是按照上边代码段里的形式编写。



三种参数传递机制的选择:

double avg(const vector<int> & arr, int n, bool & errorFlag)

这里的arr使用的是按常量引用调用来传递,n是按值调用来传递,errorFlag是使用引址调用来传递。

参数传递机制的选用可以通过以下两步的判断来决定:

1. 如果参数必须能够改变实参的值,那么就必须使用引址调用。

2.当实参的值不能被形参改变,如果参数类型是简单类型,使用按值调用。否则,一般按常量引用调用来传递(否则复制消耗巨大)。

参数传递选项总结如下:

1.按值调用适用于不被函数更改的小对象。

2.按常量引用调用适用于不被函数更改的大对象。

3.引址调用适用于所有可以被函数更改的对象。

PS:

值传递:传递过程中,将变量的值拷贝一个副本,用这个副本值来对新变量完成初始化;
                传递结果:两个变量的值相同,但互相独立。

引用传递:传递过程中,只传递原变量的指针副本,新变量接受这个指针副本;
                    传递结果:两个变量指向同一个对象。

由以上可知:值传递与引用传递最大的区别在于:传递过程中是否发生了对象的拷贝

PS:

对于:

int* const a = &b;

const int* a = &b;

如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的 右侧,const就是修饰指针本身,即指针本身是常量。

你可能感兴趣的:(数据结构与算法分析 c++描述 读书笔记(2))