基于数组的基础,无法访问数组元素?

时间:2013-02-26 07:23:04

标签: c pointers

嗨,朋友们,             我是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个位置打印该值,但无法获取如何访问元素的其余部分...请帮帮我!

3 个答案:

答案 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)相同。

答案 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;
}

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

答案 2 :(得分: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],然后{ {1}} p[1]将评估为main_arr[0][1],与*(main_arr[0] + 1 * sizeof(int))的值相同。