基本数组为基础,无法访问数组元素?

基本数组为基础,无法访问数组元素?

问题描述:

嗨朋友, 我是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个位置值,但没有得到如何访问元素的休息......请帮帮我!

你想

...: %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

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]

#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; 
} 

我想代码很简单,可以理解?