我们要有一个概念:计算机编程世界中的东西都是放在一块块的内存上面,你可以理解内存就相当于商场的储物柜。有些柜子比较大,有些柜子比较小。但是你要明白一点,内存其实就相当于整个储物柜,然后当你申请变量空间的时候,他在划分成为一个个柜子给你存放东西。电脑中一个内存单元为一字节,而一个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]。
快点关注我们吧!
领取专属 10元无门槛券
私享最新 技术干货