指针铁律

铁律2
站在c++编译器的角度  指针就是一个变量,除此之外啥也不是!  是变量就占内存空间, 没有内存空间何来的变量,不管1一个*,还是8个*,对c++编译器来讲  只会分配4个字节内存。
铁律1:指针是一种数据类型  
1) 指针也是一种变量,占有内存空间,用来保存内存地址
测试指针变量占有内存空间大小
2)*p操作内存
在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示 操作 指针所指向的内存空间中的值
*p相当于通过地址(p变量的值)找到一块内存;然后操作内存
*p放在等号的左边赋值(给内存赋值)
*p放在等号的右边取值(从内存获取值)
3)指针变量和它指向的内存块是两个不同的概念
含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;p = p +1; //p++
含义2 给*p赋值*p='a'; 不会改变指针变量的值,只会改变所指的内存块的值  
含义3 =左边*p 表示 给内存赋值, =右边*p 表示取值 含义不同切结!
含义4 =左边char *p 
含义5 保证所指的内存块能修改
4)指针是一种数据类型,是指它指向的内存空间的数据类型
含义1:指针步长(p++),根据所致内存空间的数据类型来确定

铁律2:通过*p/*p++ 来改变变量的值是指针存在的最大意义

1)两码事:指针变量和它指向的内存块变量

2)条件反射:指针指向某个变量,就是把某个变量地址否给指针

3*p间接赋值成立条件:3个条件

a)2个变量(通常一个实参,一个形参)

b) 建立关系,实参取地址赋给形参指针

c)*p形参去间接修改实参的值

Int iNum = 0; //实参

int *p = NULL;

p = &iNum;

iNum = 1;

*p =2 ; //通过*形参 == 间接地改变实参的值

*p成立的三个条件:

 

4)引申:函数调用时,n指针(形参)改变n-1指针(实参)的值。

//改变0级指针(int iNum = 1)的值有2种方式

//改变1级指针(eg char *p = 0x1111 )的值,有2种方式

//改变2级指针的(eg char **pp1 = 0x1111 )的值,有2种方式

 

//函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p,来改变实参,把运算结果传出来。

//指针作为函数参数的精髓。

 

间接赋值的应用场景分析

//C++多态实现的技术推演

//AOP切面编程java 2-3),3

//1定义一个变量(通常是实参)定义一个变量(通常是形参)

//2建立联系把实参取地址取地址传给形参

//3*p形参,就间接地修改了是实参的值。

 

//*p = 10;

 

//间接赋值应用场景概念建立

//1 在一个函数里面

//*p1++ = *p2++  //完成内存块的copy

//2 在两个函数之间,指针做函数参数把运算结果给甩出来

//123

//123

//1             23

间接赋值的推论=====è指针做函数参数

 

         //在函数调用的时候

         //1级指针(形参)去改变了0级指针(实参)的值  (通过*p去间接修改了实参的在值)

 

         //2级指针(形参)去改变了1级指针(实参)的值  (通过*p去间接修改了实参的在值)

         //3级指针(形参)去改变了2级指针(实参)的值  (通过*p去间接修改了实参的在值)

         //n级指针(形参)去改变了n-1级指针(实参)的值  (通过*p去间接修改了实参的在值)

形象的比如:

子弹沿着枪管发射,才有威力!

 

指针就像子弹,函数就像枪管,指针沿着枪管发射出去,才能显示它的威力。。。。。。


 

 


p++=è(unsigned char )p+sizeof(a);
结论:指针的步长,根据所指内存空间类型来定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值