数组、指针的区别

数组、指针的关系

  1. 常常有同学把数组和指针混为一谈,认为指针和数组是等同的!这样的思维是不对的。

  2. 数组和指针在某些场景下用法是相同的,但绝对不能说(指针=数组)这种结论,下面将指出它们的区别

    1. 在声明数组的时候,编译器同时给数组分配了指定大小的空间,用于容纳数组的元素;而声明一个指针的时候,编译器只分配了容纳指针本身的空间(如64位系统中8个字节)。

    2. int arr[10] = {0};
      int *p = NULL;printf("arr = %d\n", *arr);printf("p = %d\n", *p);
      

      使用①打印方式是合法的,对数组的第一个值打印,结果是0;但是②中*p这个操作是非法的,因为 *p这个操作将会访问内存中不确定的位置,会导致段错误。

    3. int arr[10] = {0};
      int *p = arr;
      arr++;
      p++;
      

      p++是一个合法操作,对指针做偏移;但是arr++操作是非法的,因为arr的值是固定的,是一个常量(数组第一个元素的内存地址)。

    4. 对数组取sizeof操作的时候,sizeof计算的是整个数据的大小;而对指针取sizeof时,是一个指针所占用的字节数,64位系统中是8个字节,固定的值。

    5. int arr[10] = {0};
      int *p = arr;
      
      printf("arr = %p\n", arr);
      printf("arr = %p\n", &arr);
      
      printf("p = %p\n", p);
      printf("p = %p\n", &p);
      

      上面输出一样么?不一样,但是前两个是一样的地址。对数组名单目操作&返回一个指向数组的指针,而不是一个指向数组第一个元素的指针的指针!

    以上就是指针个数组的的区别,本人能力优先,如有错误望各位大佬不吝指正,原创不易,转载请注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值