C++指针小结

  1. 声明指针
    要声明指向特定类型的指针,需按照如下格式:
typeName *pointerName

示例:

double *pn;//pn指向一个double类型的值
char *pc;//pc指向一个char类型的值
  1. 给指针赋值
    将内存地址赋给指针,可以对变量名运用&运算符,来获得被命名的内存的地址,new运算符返回未命名的内存地址
    示例:
double *pn;
double *pa;
char *pc;
double bubble=3.2;
pn=*bubble//将pn的地址赋给pn;
pc=new char//给pc赋一个char 的地址;
pa=new dobule[20]//给pa赋值一个数组长度为20的地址;
  1. 对指针解除引用
    对指针的引用意味着获取指针指向的值,对指针应用解除指针引用或间接值运算符(*)来解除引用。
cout<<*pn;//输入一个double值
*pc<<'S'//将'S'的地址赋给pc
  1. 区分指针和指针指向值
    如果pt是指向int的指针,则*pt不是指向int的指针,而是完全等同一个int的类型变量,pt才是指针。
    示例:
int *pt=new int ;//给pt赋值一个int的地址
*pt=5;
  1. 数组名
    在多数情况下,C++将数组名视为数组第一个元素的地址
    示例:
int c[10];//c的地址为c[0]的地址

一种例外情况是,将sizeof运算符用于数组名,此时将返回整个数组的长度

  1. 指针算术
    C++允许将指针和整数相加。加一的结果等于原来的地址加上指向对象占用的总字节数。还可以将指针减去另一个指针,获得两个指针的差。后一种运算将得到一个整数,仅当两个指针指向同一个数组(也可以指向超出结尾的一个位置)时运算才有意义:将得到两个元素的间隔
    示例:
int a[10]={5,2,8,4,1,2,2,4,6,8};
int *pt=a;
pt=pt+1;//pt原来地址3004上加上4字节
int *pe=&a[9];//pe是3036,占4个字节
pe=pe-1;//pe地址是3032,占4个字节
int diff=pe-pt;//得到间距
  1. 数组的动态联编和静态联编
    使用数组声明创建数组时,将采取静态联编,即数组长度在编辑时设置:
int a[10];

使用new[]运算符创建数组时,将采取动态联编(动态数组),即将运行时为数组分配空间,其长度也在运行时分配,使用完这种数组后,应使用delete[]释放其占用的内存

int size;
cin>>size;
int *a=new int [size];
.....
delete []a;
  1. 数组表示法和指针表示法
    使用方括号数组表示法等同于对指针解除引用:
a[0] means*a means the value at address a;
a[3] means*(a+3)means the value at address a+3;

数组名和指针变量都是如此,因此对于指针和数组名,既可以使用指针表示法,也可以使用数组表示法。

int *pt=new int [5];
*pt=5;
pt[0]=6;
pt[9]=44;
int coast[10];
*(coast+4)=12;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值