2013-10-23 27 views
-1

我想傳遞一個指針作爲陣列的大小元件傳遞指針作爲陣列的大小用C

例如:

void hello(int array1[how can i refer pointer "ptr" here][2]) 
    { 
    // i want to access the array used in the main() here 
    printf("hi"); 
    } 

int main() 
{ 
     int c=5; 
     int *ptr=&c; 

     a[*ptr][2]; 
     a[0][1]=0; 
     a[0][2]=4; 

} 

我爲不是清楚我的問題這裏道歉,我想要在我的hello()函數中訪問main()函數中使用的數組。

+2

你爲什麼要這麼做?這沒有任何意義。 –

+1

到目前爲止,許多人已經指出了答案,但我必須迴應上述問題 - 爲什麼要這樣做,這沒有意義!我假設你正在一個32位系統上工作,所以一個int只有32位,4個字節,如果你將它用作一個函數的參數,並不是一個問題,例如: 'void someFunc(int sizeofArray) ' –

+1

另外,如果您詢問C,請不要標記您的問題C和C++。我刪除了C++標記。 –

回答

1

你將不得不使用的價值指向指針:

a[*ptr][2]; 

ptr是地址由指針不存儲在那裏的價值指向。您使用解引用運算符*來獲取該值。

1

使用引用操作*

a[*ptr][2]; 

表達*ptr告訴編譯器使用的值由ptr指向。


至於您更新的問題,那是不可能的。但它也不需要,因爲它無論如何都是作爲指針傳遞的。

當聲明一個函數,這樣的:

void foo(int a[5][5]) 

是一樣的:

void foo(int a[][2]) 

而且也與此相同:

void foo(int (*a)[2]) 
+0

我編輯了一下我的問題,有人可以請回答 – james

+0

@james更新了我的回答 –

1

當然,ptr是不是int類型,它是int *(整數指針)類型。數組下標必須是int

也許你想要的是a[*ptr][2]

+0

數組下標必須是整數類型,但它不一定是'int'(它可能是'size_t', 'unsigned','short','long long'等)。 – dreamlax

1

您需要使用,否則你不使用的PTR您在內存中返回一個錯誤使用其地址的值* PTR所以

int c = 5; 
int *ptr = &c; 

a[*ptr][2]; 

以尊重的指針。

1

它已經幾乎被已經回答了,你不能叫一個ADRESS數組中a[0x3950f2][2] 始終使用指針*獲得陣列a[*ptr][2]中的位置,以獲得預期值 - 在這種情況下:a[*ptr][2] == a[5][2]。您可能會閱讀this.

編輯到您更新的問題:您不能這樣做。您在調用函數或在函數中使用該變量時可以使用指針可以

你的第二個編輯:

void hello(int **array1) 
{ 
    // i want to access the array used in the main() here 
    printf ("hi"); 
    a[0][0] = 24; 
} 

int main() 
{ 
    int c = 5; 
    int *ptr = &c; 
    int **a; 
    a[*ptr][2]; 
    a[0][1] = 0; 
    a[0][2] = 4; 

    hello (a); 
    return 0; 
} 
+0

第二次編輯的任何解決方案? – james

+0

你走了。希望這是你的預期。 – Blacktempel