int * p =NULL;和*p =NULL的区别a和&a的区别

1.int * p =NULL;和*p =NULL的区别

1 .int * p =NULL

int *p=NULL;

这里写图片描述
这里写图片描述
定义一个指针变量p,其指向的内存里面保存的是int类型的数据;再定义变量p的同时把p的值设置为0x00000000, 而不是把*p的值设置为0x00000000

2.*p =NULL

int i =10;
int * p =&i;
*p =NULL;
  • int i = 10;
    int i =10;
  • int * p =&i;

这里写图片描述

  • *p =NULL;
    这里写图片描述
    p指向的内存由原来的10变为了0; 而p本身的值(内存地址)没变

2.a和&a的区别

	int a[5] = { 1,2,3,4,5 };
	int *ptr = (int *)(&a + 1);
	printf("%d,%d", *(a + 1), *(ptr - 1));

这里写图片描述

  • &a :a单独存在,为数组a的首地址

  • &a+1:a为数组的首地址,数组的首地址加上 (数组元素个数)
        sizeof(int)即下个数组的首地址
    所以两个数相差20个bite

  • a:数组首元素地址a[0]

  • a+1:数组下一个元素的首地址
    这里写图片描述

  • 值相同意义不同
    所以两个数相差4个bite

  • (a+1):没有单独放在括号内部,降级变为首元素地址,
         即为数组下一个元素首地址

  • (ptr-1):ptr指向的是a[5],并且ptr是int*型的,所以他减1指向a[4]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值