ca28a_demo_c++指针-指针和引用的区别

//28_CppPrimer_指针c++_txwtech
/*
什么是指针,在c语言是重点,用于操作数组。c++基本不用指针,一般用vector向量操作
指针的定义和初始化,c++不会检查是否初始化
指针操作
比较复杂,需要掌握基础知识
*/

指针和引用的区别:

指针:可以先声明后,再初始化。可以改变指向另外一个对象
引用:在声明时,必须初始化,不可以改变指向另外一个对象,一旦定义ri就只能引用ival; &ri = ival。ri就是ival的别名。

//28_CppPrimer_指针c++_txwtech
/*
什么是指针,在c语言是重点,用于操作数组。c++基本不用指针,一般用vector向量操作
指针的定义和初始化,c++不会检查是否初始化
指针操作
比较复杂,需要掌握基础知识
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
	string s("hello world");
	string *sp = &s;//指针里面保存的是地址
	cout << s << endl;
	cout << *sp << endl;//*对sp解引用,指针所指向内存中的数据

	cout << sp << endl;//sp就是地址,例如:006FF7BC

	vector<int> *pvec;
	int *ip1,*ip2;
	double dp, *dp2;
	int ival = 1024;
	int *pi = 0;//指针是0,表示不指向任何对象
	int *pi2 = &ival;//&取地址操作符
	int *pi3;//没有初始化
	pi = pi2;
	pi2 = 0;

	int ival2;
	int zero = 0;
	const int c_ival = 0;
	//int *pi4 = ival;//不能指向变量,只能指向地址。
	int *pi4 = &ival;
	int *pi5 = c_ival;//常量可以指向地址
	int *pi6 = NULL;//NULL是宏定义的,可以这么操作

	double dval;
	double *pd = &dval;//只能指向同类型的变量
	double *pd2 = pd;//可以地址传地址

	//int *pi7 = pd;////只能指向同类型的变量,这个不行
	//int *pi7 = &pd;//只能指向同类型的变量,这个也不行

	double obj = 3.14;
	int k;
	void *pv = &obj;//void万能指针,操作有限:如:比较,函数传递,与返回,与void赋值操作,
	pv = &k;

	int a = 1;
	int *pa = &a;
	a = a + 2;
	*pa = *pa + 2;//
	cout << a << endl;//都是5
	cout << *pa << endl;//都是5
	return 0;

}
#include <iostream>//
using namespace std;

int main()
{
	int ival = 1024, ival2 = 2048;
	int *pi = &ival, *pi2 = &ival2;
	int &ri = ival, &ri2 = ival2;//引用
	//指针可以先声明后,再初始化。可以改变指向另外一个对象
	//引用,必须在声明时,必须初始化,不可以改变指向另外一个对象,一旦定义ri就只能引用ival; &ri = ival。ri就是ival的别名。
	//引用

	int **ppi = &pi;//指针的指针
	pi2 = *ppi;//可以这样传递

	cout <<"指针的指针"<< **ppi << endl;//输出ival 1024

	cout << ival << ", " << *pi << "," << ri << endl;
	cout << ival2 << ", " << *pi2 << "," << ri2 << endl;
	
	return 0;
}
发布了356 篇原创文章 · 获赞 186 · 访问量 89万+

猜你喜欢

转载自blog.csdn.net/txwtech/article/details/104088951
今日推荐