2016-11-17 75 views
-1

我不确定如何以不同的方式调用此两个指针,请更正我的条款。指针与地址参考之间的区别

#include <stdio.h> 

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

    return 0; 
} 

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

+12

本网站有1000个问题。请做一些搜索。 – P0W

+0

我的不好,我不知道如何调用arr和* ptr。 – kingyum

+0

也许你称他们为指针? – ckruczek

回答

1

arr是一个数组而ptr是类型为int的指针。

有差异。让我列举几个

  1. sizeof(arr)sizeof(ptr)
  2. 不同,您可以使用ptrarr++是一个无效的操作做ptr++指针操作。

去你的是什么指针和数组之间的区别评论我已经回答了你的问题

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; 

是无效的,因为阵列不能为一个修改的左值

+0

为什么这会被低估?这不是最完整的答案,但它没有提供任何错误信息。 OP可能不值得* ptr与ptr不同。 (* ptr = arr [0] = 10,而ptr = arr =&arr [0]) –

+0

*(arr + 1)也可以作为*(ptr +1) – kingyum

+0

@kingyum *(arr + 1)= arr [1 ]。你必须注意的是*(a + i)= a [i] – Gopi

-1

'是有一些差异ARR和* PTR'

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