2016-11-17 77 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)