C++——指针1
7、关于内存地址
内存空间的访问方式:通过变量名访问,通过地址访问;
地址运算符:& 如:int var; 则&var表示变量var的内存起始地址;
//& 出现在声明语句中出现时引用,别名而已,在运算表达式中出现&,说明是取内存地址。
7.1 指针变量的概念 指针:内存地址,用于间接访问内存单元
指针变量:用于存放地址的变量
声明: 如 static int i; static int *i_point[p1] =&i;
在声明语句中,指针变量i_point存放的是内存地址&i,(*i-point)存放的是i的数值。
指针初始化:语法形式 存储类型 数据类型 *指针名=初始地址;
注意事项:用变量地址作为初值时,该变量必须在指针初始化之前已经说明,且变量类型应与指针类型一致。可以用一个已赋值的指针去初始化另一个指针变量;不要用一个内部auto变量去初始化static指针。
指针变量的赋值运算: 指针名=地址 1.地址中存放的数据类型与指针类型相符;
2.向指针变量赋的值必须是地址常量或变量,不能用普通整数,但可以赋值为0,表示空指针;
3.指针的类型是它所指向变量的类型,而不是指针本身数据值的类型,任何一个指针本身的数据值都unsigned long int类型;
4.允许声明指向void类型的指针,该指针可以接受任何类型对象的地址。
#include<iostream> using namespace std; int main() { int *i_pointer; //声明int型指针i_pointer int i; //声明int型数i i_pointer=&i; //取i的地址赋给i_pointer i=10; //int型数赋初值 cout<<"Output int i="<<i<<endl; //输出int型数的值 cout<<"Output int pointer i="<<*i_pointer<<endl; //输出int型指针所指地址的内容 }//程序运行的结果是:Output int i=10,Output int pointer i=10
使用void类型的指针:
void vobject;//错,不能声明void类型的变量
void *pv;//对,可以声明void类型的指针
int *pint; int i;
int main(){ pv = &i; //void类型指针指向整型变量
//void指针赋值给int指针需要类型强制转换:
pint = (int *)pv;
}
7.2 指向常量的指针
不能通过指针来改变所值对象的值,但是指针本身可以改变,可以指向另外的对象。
例1
char *name1="John"; //name1是一般指针,该字符串的地址赋值给name1
*name1='A'; //编译正确,运行出错,因为这试图改变字符串常量"John"的值。
例2
const char *name1="John"; //指向常量的指针,但是name1本身依然是变量。
char s[]="abc";
name1=s; //正确,name1本身的值可以改变
*name1='1'; //编译时指出错误
若声明指针常量,则指针本身的值不能被改变;
char *const name2=”john”;
name2=”abc”;//错误,指针常量值不能改变。
7.3 指针变量的算术运算
指针与整数的加减运算
– 指针p加上或减去n,其意义是指针当前指向位置的前方或后方第n个数据的地址。
– 这种运算的结果值取决于指针指向的数据类型。
指针加一,减一运算
– 指向下一个或前一个数据。
– 例如:y=*px++ 相当于 y=*(px++)
(*和++优先级相同,自右向左运算)
关系运算 同类型的指针变量可以相互比较和与0比较;
赋值指针 赋值给指针的必须是变量或常量,不能是普通整数,除了0。
最新文章
- 20169212《Linux内核原理与分析》第五周作业
- gRaphael——JavaScript 矢量图表库:两行代码实现精美图表
- win8开发wpf程序遇到的无语问题
- []cp,转载]提示MyEclipse Trial Expired,如何手动获取MyEclipse 注册码!很牛!
- C++学习笔记3——类的封装(1)
- Ubuntu source insight3稳定性
- Python 直接赋值、浅拷贝和深度拷贝全解析
- 怎么为WebStorm更换主题 修改字体样式
- JAVA_SE基础——49.多态的应用
- 深度学习之自编码器AutoEncoder
- Linux Logwatch的学习总结
- 16.ajax_case03
- 对数log
- 《剑指offer》-数字在排序数组中出现的次数
- zabbix3.4.7之Zabbix_Trigger_Function详解
- Servlet基本_初期化パラメータ、外部ファイル
- 苹果电脑thunderbolt连接两台电脑启动方法
- pygame系列_小球完全弹性碰撞游戏_源码下载
- tensorflow进阶篇-4(损失函数1)
- Func的介绍——c#封装的代理
热门文章
- 解读前端js中签名算法伪造H5游戏加分
- springCloud进阶(微服务架构&;Eureka)
- 3.Python运算符详解
- mysql 查询出现 ";this is incompatible with sql_mode=only_full_group_by";错误解决方案,以及个人rpm方式重装所遇到的问题备份
- 选择排序 C++实现
- opencv —— resize、pyrUp 和 pyrDown 图像金字塔(高斯金字塔、拉普拉斯金字塔)与尺寸缩放(向上采样、向下采样)
- hash类型的应用场景 —— Redis实战经验
- KD-Tree 学习笔记
- codechef Chef at the River
- Visionpro学习笔记(壹)