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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csdn_kou/article/details/82778677

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]

猜你喜欢

转载自blog.csdn.net/csdn_kou/article/details/82778677
今日推荐