2016-09-18 279 views
-3

我在創建一個指向數組中的每個指針指向一個數組的指針數組的指針時遇到了問題。我無法設置並在每個數組中存儲值。目標是避免數組索引並僅使用指針運算。如何正確實現這個想法並在稍後存儲訪問值的例子將幫助我極大地理解函數指針,數組指針和指針算術。我知道如何使用malloc和calloc。我知道基本的指針,但是這個問題更加先進,所以這些實現的一些例子將會非常有幫助!謝謝! :)指向數組的指針數組,其中每個指針指向數組

+0

這將是巨大的,以顯示你已經嘗試過的東西。此外,你指定了一個不完整的類型;我們需要知道最裏面的數組存儲的是什麼類型。此外,還需要更多細節 - 數組(每個級別)的固定大小還是可變大小?等等 – Purag

+0

當你說「指向一個數組」時,你的意思是嗎? (而不是「指向數組的第一個元素」) –

+0

您必須注意並不要混淆'type * []'(指向type的指針數組)和'type(*)[]'(指向。陣列) –

回答

0

從你的描述聽起來就好像你需要的東西,如:

#include <stdio.h> 

int main(void) { 
    // Make some arrays of ints 
    int a0[3] = {1, 2, 3}; 
    int a1[3] = {4, 5, 6}; 

    // To access element a1[2] do *(a1 + 2) 
    printf("%d\n", *(a1 + 2)); 

    // Make an array of int pointers 
    int* b[2] = {a0, a1};    // Or: int* b[2]; 
             //  *(b + 0) = a0; 
             //  *(b + 1) = a1; 

    // To access element a1 do *(b + 1) 
    // To access a1[1] through b just combine the two expressions 
    // so that you have *(*(b + 1) + 2) 
    printf("%d\n", *(*(b + 1) + 2)); 

    return 0; 
} 

一般來說:要訪問b[i][j]*(*(b + i) + j)

+0

因此僅使用*(b + i)就可以在不使用'[]'的情況下向數組添加元素? –

+0

@ MD_90 - 是的。而不是初始化列表,我可以這樣做:'*(b + 0)= a0; *(b + 1)= a1;' – 4386427