首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

指针详解(1)

我们要有一个概念:计算机编程世界中的东西都是放在一块块的内存上面,你可以理解内存就相当于商场的储物柜。有些柜子比较大,有些柜子比较小。但是你要明白一点,内存其实就相当于整个储物柜,然后当你申请变量空间的时候,他在划分成为一个个柜子给你存放东西。电脑中一个内存单元为一字节,而一个int 占了4字节,因此系统会划分四个单元的内存存放int。

之前说过了指针类型。现在解释一下:

指针的类型决定了编译器提取那片区域的类型:

提问:

(1)若p,q均为指针,若*p=*q,则p等于q?

(2)若p,q均为指针,p=q,则*p等于*q?

答案:(1)为错,因为指针的值是指针所指向的地址,一般长32位,但是指针是16进制的,一位16进制等于4位二进制(2的4次方=16)所以指针显示为8位16进制数值。

2个指针所指向的区域里的值相等,并不代表2个指针相等。

比如int a=5;int b=5。 int *p=a; int *q =b;你觉得a的地址会跟b的地址相同吗?

(2)为错,这个更好解释了举一个例子:

int *p;char *q;int a=48;

p=q=a;

*p的值是48,而*q的值是‘0’。因为编译器是根据指针的类型去提取那片区域的值。在ascii码中48为字符'0'。

变量指针和指针变量:

变量指针:所谓变量的指针即指变量在内存所占的存储单元的首地址,int a;&a就是首地址,就是变量指针。

指针变量:指针的变量就是int *p;p是一个可以存放地址变量的指针。

你可以认为:指针变量需要取到变量指针,

比如int *p,a[5],b;

因为数组a变量名就是一个地址,也就是变量指针。

p=a; 就是指针变量取变量指针,这时p的值就是指针变量也就是数组a的首地址。

而b是一个普通的变量名,需要p=*b;

int a[5].int *p=a;这时候,p是指向数组a的第一个元素即a[0];

当p++或者是p+1的时候,p将指向a[1]。为什么呢?

因为int *p.开头讲了int是四个字节,当你编写p++或者p=p+1的时候,编译器是默认p=p+sizeof(int);sizeof是返回数据空间的字节数。所以p+=4的时候,指向的是a[0+4],就是a[4]。

快点关注我们吧!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190109G1I08G00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券