C++学习总结(2)

1、const指针

指向常量的指针变量,其一般形式为 "const 类型名 * 指针变量名 " 。 如下:

int a=12,b=15;
const int *p=&a;
int *q=&b;
*p=22;	//非法,试图通过p修改a的值
*q=22;	//一般的指针变量可以修改,合法
p=&b;	//p改为指向b,合法。

2、引用

  对于数据可以建立一个“引用”,它的作用是为变量起另一个别名。

int main()
{
	int a=5;
	int &b=a;
	printf("%d\n",b);
}

  以上声明了b是a的引用,即b是a的别名,这样声明后,a和b的作用是相同的,都代表同一变量。可以这样去理解:通过b去引用a。在上面的声明中,"&"是引用声明符,不代表地址。

需要注意几点:

  1. 引用是一种独立的数据类型。对引用只有声明,没有定义。即必须先定义一个变量,然后对该变量建立一个引用。
  2. 声明一个引用,必须同时使之初始化,即声明它代表哪一个变量。
  3. 声明另一个变量后,不能再使之作为另一个变量的引用。
  4. 不能建立引用数组如:
    int main()
    {
    int a[5];
    int &b[5]=a;	//错误,不能建立引用数组
    int &b=a[0];	//错误,不能作为数组元素的别名
    }
  5. 不能建立引用的引用。
    int main()
    {
    	int a=3;
    	int &b=a;
    	int &c=b;	//建立引用的引用,错误
    }
  6. 可以取引用的地址,如声明b是a的引用,则&b就是变量a的地址。
    int main()
    {
    	int *pt;
    	pt=&b;	//把变量a的地址&a赋给指针变量pt
    }

3、运算符new和delete

  C++提供了较简便而功能强大的运算符new和delete来代替malloc和free函数,因此最好不用malloc和free;

int main()
{
	int m=3,n=4,i;
	int **a  =  new int*[m];  //分配一个指针数组,将其首地址保存在a中   、
	for(i = 0; i < m; i++)   //为指针数组的每个元素分配一个数组
       a[i] = new int [n];
	//动态声明的数组,使用后需要释放内存。
	for(i = 0;i < m; ++i)
		delete [] a[i];
	delete []a;
	return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/helloworldcode/p/9121018.html
今日推荐