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_arrarr1は両方の配列を指していますarr2。したがってmain_arr[0]、最初の配列の最初の要素を指します。他の要素にアクセスするには、2番目を変更し[0]ます。

見てみな

もう1つの方法は、醜いですが現在のコードに近いもので、ポインター演算を使用することです。

...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 のアドレスを指す 2 つのポインターしかありません。

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

は arr1 の最初の要素のアドレスを指しているため、を使用main_arr[0][1]して の 2 番目の要素にアクセスできます。arr1main_arr[0]

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 に答える