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 个位置打印值,但不知道如何访问元素的其余部分......请帮助我!

4

3 回答 3

1

你要

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

main_arr指向两个数组arr1, arr2。所以main_arr[0]指向第一个数组的第一个元素。要访问其他元素,请修改 2nd [0]

一探究竟

另一种更丑但更接近您当前代码的替代方法是使用指针算法。

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

请记住,arr[1]与 相同*(arr+1)

于 2013-02-26T07:24:53.347 回答
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;
}

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

于 2013-02-26T08:00:26.103 回答
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]

于 2013-02-26T07:43:10.310 回答