C语言之一级指针与二级指针剖析

什么是指针?

       在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,  它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。


总结:指针就是变量,用来存放地址的变量。(存放在指针中的值都被当做地址来处理)

为什么存在指针?

      将计算机的内存分成很多个小的单元,每个单元都对应一个独一无二的地址,这样就一块地址标示一块空间,方便管理。

指针的大小

  • 在32位的机器上,地址是32个0或者1组成二进制序列,那地址就得用4个字节的空间来存储,所以一个指针变量的大小就应该是4个字节。
  • 在64位的机器上,有64个地址线,那一个指针变量的大小是8个字节,才能存放一个地址。
指针和指针类型
我们都知道,变量有不同的类型,整形,浮点型等。那么指针有没有类型呢?
int a = 0;
p = &a;
要将&a(a的地址)保存到p中,p是一个指针变量,保存一个整形变量的地址。我们称p为整形指针。
二级指针
指针变量也是变量,是变量就有地址,那指针变量的地址存放在那里呢?

对于二级指针的运算有:
  • *ppa 通过对ppa中的地址进行解引用,这样找到的是 pa , *ppa 其实访问的就是 pa。
  • **ppa 先通过 *ppa 找到 pa ,然后对 pa 进行解引用操作: *pa ,那找到的是 a。
指针表达式解析
当有代码:
char ch = 'a';
char *cp = &ch;
下面代码什么意思?能否做左值?能否做右值?
&ch;//不可左值可右值。&ch得到的是ch的地址,是一个常量。
cp;//既可左值也可右值。字符指针,存的是&ch(ch的地址)。
&cp;//不可左值可右值。&cp是cp的地址,是一个常量。
*cp+1;//可右值不可左值。因为*优先级高于+所以*cp先结合,再加1就成了一个值而不是一块空间。
*(cp+1);//可右值可左值。指向ch下一个地址的空间。
++cp;//不可左值,++cp只是将cp中的内容加一,是一个地址常量。
cp++;//不可作为左值。
*++cp;//可左值可右值,表示指向ch后的下一块空间。
*cp++;//可左值,++优先级高于*,后置++cp先与*结合,表示指向a的下一块空间。
++*cp;//不可左值可右值,对*cp进行前置++操作,表示ch中的内容加一。
(*cp)++;//不可左值可右值,对*cp进行后置++操作,是一个表达式。
++*++cp;//可右值不可左值,cp先与最近的++结合,指向下一块空间,在进行解引用,再结合++,//对空间中的值加一。
++*cp++;//可右值不可左值,先对ch加一,运算结束后cp加一指向下一块空间。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值