指针进阶之指针的区别

在这里插入图片描述

zxf@zxf-virtual-machine:test$ cat test.c
#include <stdio.h>
#include <stdlib.h>

typedef int ARRAY[5];

int main(void)
{
	int a[5] = {1,2,3,4,5};
	ARRAY* pa = NULL;
	int *qa = a;
	pa = &a;

	printf("qa= %p \n",qa);
	printf("a = %p \n",a);
	printf("pa = %p  \n",pa);
	printf("qa +1 = %p \n",qa+1);
	printf("a +1 = %p \n",a+1);
	printf("pa +1  = %p  \n",pa+1);
	printf("(*)pa[3] = %d\n",(*pa)[3]);
	return 0;
}
zxf@zxf-virtual-machine:test$

运行结果如下:

zxf@zxf-virtual-machine:test$ vim test.c
zxf@zxf-virtual-machine:test$ gcc -o test test.c 
zxf@zxf-virtual-machine:test$ ./test 
qa=  0xbf96b454 
a =   0xbf96b454 
pa = 0xbf96b454  
qa +1 =  0xbf96b458 
a +1 =    0xbf96b458 
pa +1  = 0xbf96b468  
(*)pa[3] = 4

解释:
区别两个指针是否一样,关关键在于

  1. 指针所指向的地址类型;

  2. 指针第偏移一个单位的内存长度;

    上面的实例中:可以看出 pa +1所偏移的是数组int a[5]的大小为20个字节,一个int型4个字节5个刚好是20个字节,所以pa从0xbf96b454偏移到0xbf96b468(要注意的是这里是十六进制);qa和a都是指向数组a的首地址,pa和qa、a指针是完全不同的,上面说指针区别在于指针所指针向的地址类型,这里类型都是一样的,区别在于指针每偏移一个单位的内存长度,在用的时候要特别注意。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值