指针

C++编程语言对程序员非常的信任,因此它赋予了指针无比强大的功能,通过指针程序员可以直接对内存进行操作,这样的优点是使程序紧凑,简洁,高效;

指针就是用来保存内存地址的变量。

什 么 是 地 址 :
//& 取地址符,获得变量i在内存中的地址。
#include<iostream>
using namespace std;
int main()
{
int i = 1;
cout << &i << endl;//输出的就是i的地址
return 0;
}

用  指 针 来 保 存 地 址 :
//(*)关键符号,
#include<iostream>
using namespace std;
int main()
{
int i = 1;
int *p;//定义了一个指针P,星号(*)代表变量P是一个指针,它的类型也是int。
p = &i;//变量i的地址赋给指针p
cout << &i << endl;
cout << p << endl;
return 0;
}

空 指 针: 
我们知道指针就是用来保存内存地址的变量,因此我们定义一个指针后一定要用它来保存一个内存地址,假如我们不那么做,那么该指针就是一个失控指针,它可以指向任何地址,并且对该地址的数值进行修改或者删除,后果是非常可怕的。 
解决的办法是将该指针初始化为0

 #include<iostream>
using namespace std;
int main()
{
int *p=0;//定义了一个指向整型变量的指针P//将变量p中所保存的内存地址清0
return 0;
}
//这样指针p就不会因为我们的疏忽而随意指向任意一个地址并且修改地址的值。

指 针 与 类 型 :
由于不同类型的变量在内存中所占用的字节不同,而指针又是用来保存内存地址的变量,因此指针只能存储与它类型相同的变量的地址。
#include<iostream>
using namespace std;
int main()
{
double a=3.14;
int b = 6;
int *p1=&b;//定义了一个指向整型变量的指针变量p1,编译器知道了指针指向的类型,才能对其正确的处理与运算。
double *p2=&a;
cout << p1 << endl;//输出p1与p2所保存的内存地址
cout << p2 << endl;
p1++;
p2++;
cout << p1 << endl;
cout << p2 << endl;
return 0;
}
//指针的类型必须与变量的类型相匹配。

用  指 针 来 访 问 值 :
运算符 * 被称为间接引用的运算符,当使用星号 * 时,就读取它后面变量中所保存的地址处的值。
#include<iostream>
using namespace std;
int main()
{
int a = 1;
int *p;
p = &a;
cout << *p<<endl;        //带星号的是输出地址的值
cout << p << endl;        //不带星号的是输出内存地址
cout << &a << endl;
cout << a << endl;
return 0;
}
//指针变量p前面的间接运算符 * 的含义是:“储存在此地址处的值”。*p的意思就是读取该地址处的值。由于p存储的是a的地址,因此执行的结果是输出a的值:1。
//如果只是输出p的话将会打印出变量a的内存地址(如前例)。

容易混淆的概念:
指针地址,指针保存的地址和该地址的值。
#include<iostream>
using namespace std;
int main()
{
int i;
int *p=0;
cout << "i的地址为:" << &i << endl;
cout << "p的值为:" << p << endl;
cout << "p的内存地址为:" << &p << endl;
i = 3;
cout << "i的地址为:" << &i << endl;
p = &i;
cout << "p的值为:" << p << endl;
cout << "p的内存地址为:" << &p << endl;
return 0;
}
//指针的地址与指针中保存的某个变量的地址是不一样的,每个指针都有一个地址,而在该地址中保存的则是另一个变量的地址。


指针对数值的操作:
计算机通过间接运算符 * 星号访问并且读取到该地址的数据,那么它就可以修改这些数据。
#include<iostream>
using namespace std;
int main()
{
typedef unsigned short int ut;//typedef(定义类型,允许你从一个现有的类型中创建一个新类型)unsigned(无符号)short(短)int(整型)
//这样一来ut 就代表了短整型
ut i=5;
ut *p = 0;
p = &i;
cout << "i=" << i << endl;
cout << "*p=" << *p << endl;
cout << "用指针来修改存放在i中的数据:" << endl;
*p = 90;
cout << "i=" << i << endl;
cout << "*p=" << *p << endl;
cout << "用i来修改存放在i中的数据:" << endl;
i = 9;
cout << "i=" << i << endl;
cout << "*p=" << *p << endl;
return 0;
}

更换指针保存的地址:
        指针保存的地址与值,可以多次进行替换。

为什么使用指针:

1:处理堆中存放的大型数据。
2:快速访问类的成员数据和函数。
3:以别名的方式向函数传递参数。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值