指针基础知识

本文详细介绍了C++中的指针概念,包括指针作为内存地址的载体,如何定义和使用指针,以及指针的运算如比较、加减、自增自减和下标运算。此外,还强调了不同类型指针间的赋值限制,并探讨了通过指针实现的内存访问自由性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

////在这里重述一下指针
指针的概念
* 每个变量都被存放在某个内存地址(以字节为单位)开始的若干个字节中,
*指针,也称做指针变量,大小为4个字节(或8个字节)的变量,其内容
代表一个内存地址。
*通过指针,能够对该指针的内存区进行读写。
*如果把内存的每个字节都想象成房间号,那么内存地址相当于房间号,而指针
里存放的是房间号。
~指针的定义
类型名 * 指针变量名
int * p;
double * pc;(类型名)//数据类型
char *pf;
~指针的内容
int *p =(int *) 40000;
p指向地址40000,地址p就是地址40000;
*p就代表地址40000开始处的若干个字节的内容
通过指针访问指向的内存空间
~指针定义总结
T* p//T可以是任何类型的名字,比如int double char 

p 的类型 T*
*p 的类型:  T
通过表达式*p ,可以读写从地址p开始的sizeof(T)个字节
*p 等价存放在地址p处的一个T类型的变量
* 间接引用运算符
~指针用法
char ch1 ='A'
char *pc=&ch1//使得pc指向ch1
& : 取地址运算符
&x:变量x的地址(即指向x的指针)
对于类型为T的变量x,&x表示变量x的地址(即指向x的指针)&x的类型是T*

有了指针,就有了自由访问内存空间的手段
不需要通过变量,就能对内存直接进行操作。通过指针,程序能访问的内存区域就
不限于变量所占的数据区域。
~指针的互相赋值
不同类型的指针,如果不经过强制类型转换,不能直接互相赋值。
//int &pn, char *pc,char c=ox65;
pn=pc;//类型不匹配,编译出错,(同类型的指针可以相互赋值)
pn=&c;//类型不匹配,编译错误,
pn=(int *)&c;
int n=*pn;//n值不确定;(不同类型的指针,要经过强制类型转换才能互相赋值)
~指针的运算
(1)两个同类型的指针变量,可以比较大小
   地址p1<地址p2,等价p1<p2值为真。
   地址p1=地址p2,等价p1==p2值为真
   地址p1>地址p2,等价p1>p2值为真
(2)两个相同类型的指针变量,可以相加减
    两个T*类型的指针p1和p2
    p1-p2=(地址p1-地址p2)/sizeof(T)
比如 int *p1,*p2;
p1=1000,p2=600;
p1-p2=(1000-600)/sizeof(int)=(1000-600)/4=100;
(3)指针变量加减一个整数的结果是一个指针
p:T*类型的一个指针
n:整数类型的变量或常量
   p+n:T*类型的指针,指向地址
      地址p+n*sizeof(T)

(4)指针变量可以自增,自减
   T*类型的指针p指向地址n
p++,++p:p指向n+ sizeof(T)
p--,--p:p指向n-sizeof(T)

(5)指针可以用下标运算符"[]"进行运算
   p是一个T*类型的指针
   n是整数类型的变量或常量
 p[n]等价于*(p+n);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值