//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 = π//指针的指针
pi2 = *ppi;//可以这样传递
cout <<"指针的指针"<< **ppi << endl;//输出ival 1024
cout << ival << ", " << *pi << "," << ri << endl;
cout << ival2 << ", " << *pi2 << "," << ri2 << endl;
return 0;
}