指针和地址引用之间的区别

时间:2016-11-17 07:32:18

标签: c pointers

我不确定如何以不同的方式调用这两个指针,所以请更正我的条款。

#include <stdio.h>

int main()
{
    int arr[3]={10,20,30};
    int * ptr = &arr[0];// arr

    return 0;
}

arr和* ptr之间有什么区别吗? 两者都指向同一个地址,但区别在于什么。

2 个答案:

答案 0 :(得分:1)

arr是一个数组,ptrint类型的指针。

存在差异。我列举几个

  1. sizeof(arr)sizeof(ptr)
  2. 不同
  3. 您可以使用ptr++执行ptr指针操作,而arr++是无效操作。
  4. 关于指针与数组有什么区别的评论我已经回答了你的问题

    int a = 10;
    int b[5] = {1,2,3,45};
    int *p = &a;
    b = &a;  /* not valid */
    

    b是一个数组,而不是指针,因此它不能保存变量的地址。

    p = b;
    p = p +1;
    
    printf("%d\n",*p); /* valid as p is pointing to second element in the array */
    
    b = b+1;
    

    无效,因为数组不能是可修改的左值

答案 1 :(得分:-1)

&#39; arr和* ptr&#39;

之间是否存在一些差异

是的,有。例如,sizeof(*ptr)的大小为int,即sizeof(int),而sizeof(arr)是整个数组的大小,等于3*sizeof(int)