2013-02-26 75 views
0

嗨朋友, 我是C新手。我想學習它,我在卡片上的某處位置卡住了。請檢查下面的程序基本數組爲基礎,無法訪問數組元素?

#include <stdio.h> 
#include <stdlib.h> 


int arr1[] = {10,20,30,40,50}; 
int arr2[] = {5,15,25,35,45}; 

int *main_arr[] = {arr1,arr2}; 

int main() 
{ 
printf("in first array 0th locatin value is: %d\n",*main_arr[0]); 
system("PAUSE"); 
return 0; 
} 

通過使用printf的我可以打印在第0個位置值,但沒有得到如何訪問元素的休息......請幫幫我!

回答

1

你想

...: %d\n",(main_arr[0])[0]); 
      -------------  ->arr1 
         --- ->arr1[0] 

main_arr指向兩個數組arr1arr2。所以main_arr[0]指向第一個數組的第一個元素。要訪問其他元素,請修改第二個[0]

Check it out

另一種選擇,但難看更接近當前的代碼,是用指針運算。

...s: %d\n",*(main_arr[0]+1)); 

記住arr[1]相同*(arr+1)

+0

感謝您的快速回復......請你解釋一下它是如何工作的....謝謝! – 2013-02-26 07:30:35

+0

@AyeshaNihal我的解釋不清楚嗎? – 2013-02-26 07:35:59

0

main_arr中只有兩個指針指向arr1和arr2的地址。

main_arr| ptr to an array | -> arr1 
     | ptr to an array | -> arr2 

所以,你可以使用main_arr[0][1]訪問的arr1的第二個元素,因爲main_arr[0]點ARR1的第一個元素的地址。

你應該知道,在C,如果p是一個指針,那麼這兩個p[3]3[p]將評估爲*(p + 3 * sizeof(type)),所以我們假設p = main_arr[0],然後p[1],這是main_arr[0][1],將評估爲*(main_arr[0] + 1 * sizeof(int)),這是相同的值與arr1[1]

1
#include <stdio.h> 
#include <stdlib.h> 


int arr1[] = {10,20,30,40,50}; 
int arr2[] = {5,15,25,35,45}; 

int *main_arr[] = {arr1,arr2}; 

int main() 
{ 
int iter1, iter2; 
for(iter1 = 0; iter1 < 2; iter1++){ 
    for(iter2 = 0; iter2 < 5; iter2++){ 
     printf("in first array nth locatin value is: %d\n",(main_arr[iter1][iter2])); 
    } 
} 
system("PAUSE"); 
return 0; 
} 

我想代碼很簡單,可以理解?