2012-07-19 63 views
1

這裏有新的東西,試圖在你們的幫助下學習一塊C,這可能是一個基本的問題......抱歉,你已經從基礎開始。試圖打印表單數組或數組地址...沒有得到它?

void main() 
{ 

char* arr[3] = {"baba","tata","kaka"}; 

char* arr1[3] = {"baba1","tata1","kaka1"}; 

char* arr2[3] = {"baba2","tata2","kaka2"}; 

char** array_all[] = {arr,arr1,arr2}; 

printf("%s\n",*array_all[0]); 

//please guide me how to access individual entity(as arr[1], arr1[2],arr3[1])  //from each array using array_all 

} 

回答

3

我不確定這是不是你正在尋找..但這是我瞭解到目前爲止。

你想要訪問array_all的各個元素(元素arr,arr1和arr2)?如果是這樣,那麼你所做的只是...

array_all[0][i]; 

其中我是你想訪問的元素。

原因是因爲索引運算符([和])實際上取消引用了一個指針,並且偏移了指定的指針(如添加了某個整數,即在內存中向下移動)。如果你不知道如果你通過某個整數添加一個指針會發生什麼,我建議讀一下指針算術。

例如:

int x[] = { 1, 2, 3 }; 
// writing x[i] is the same as *(x + i) 
int i = 2; // the element you wish to access 
*(x + i) = 4; // set the ith (3rd) element to 4 
*(x + 1) = 43; // set the 2nd element to 43 

// Therefore... 
// x now stores these elements: 
// 1, 43, 4 

// proof: print out all the elements in the array 
for(int i = 0; i < 3; ++i) 
{ 
    printf("x[%i]=%i\n", i, x[i]); 
} 

此外,寫入X [0]相同,書寫* X中,由於陣列名稱實際上指向該陣列的第一個元素。

OH和一件事,主要實際上應該返回一個整數結果。這主要用於程序中的錯誤檢查,0通常表示沒有錯誤發生,並且每個其他錯誤代碼(0以外的數字)都是與您的程序相關的一些特定錯誤,您可以選擇。 即

int main() 
{ 
    // e.g. for an error code 
    /* 
    if(someErrorOccured) 
    { 
     return SOME_ERROR_OCCURED_RETURN_VALUE; 
    } 
    */ 
    return 0; // this is at the end of the function, 0 means no error occured 
} 
+0

感謝miguel.martin ...你的努力表示感謝。我喜歡你解釋它的方式。朋友,謝謝。 – studyembedded 2012-07-19 07:53:01

+0

@studyembedded你應該投票並接受這個答案,如果它對你最有幫助。 – 2012-07-19 15:15:57

+0

數組索引的優秀詳細解釋!然而,考慮到OP的用戶名是「學習嵌入式」,最終的'一件事'可能不適用,因爲沒有OS返回。在這種情況下,使用'while(1);'(或在while(1)'循環中運行連續任務)來結束main通常更有用,以便調試器可以在任務之後檢查系統的狀態已經完成了。 – 2012-07-19 16:13:56

1

變化與此您的printf語句行..

printf("%s\n",array_all[i][j]); 

代替我的讓您的序列號,並在地方k的給你所需的元素數量。有用。

+0

你的意思是「代替* j *」嗎? – 2012-07-19 15:16:33