0

これは関数で配列を渡すための作業プログラムですが、関数では配列のベースアドレスのみが渡されることを理解できませんがprint、それでも subscript で配列にアクセスできますa[i]。正しい方法はわかっています*(a+i)が、添字でも機能するのはなぜですか?

#include <iostream>
#include <conio.h>
void print(int *a);
using namespace std;
int main()
{
    int arr[3]={1,2,3};
    print(arr);
    getch();
    return 0;
}
void print(int *a)
{
    for(int i=0;i<3;i++)
    {
        cout<<a[i];//how we are able to access array with subscipt a[i]
    }
}
4

3 に答える 3

3

ポインタ(特定のメモリアドレスを指している)を渡しているので、関数内でも通常どおり扱うことができます。ポインターと配列は非常に密接に関連しており、使用は問題ありません。

a[0] と *a は同じもので、a[1] と *(a+1) なども同じです。

「ポインターは、それが指す最初の要素のアドレスと同等です」-http://www.cplusplus.com/doc/tutorial/pointers/から

于 2013-04-20T20:36:17.417 に答える
0

配列はそのように渡すことができますが、もう 1 つの方法は、配列の名前の後に空の [] を付けることです。

#include <iostream>
#include <conio.h>
void print(int *a);
using namespace std;
int main()
{
    int arr[3]={1,2,3};
    print(arr);
    getch();
    return 0;
}
void print(int a[])
{
    for(int i=0;i<3;i++)
    {
        cout<<a[i];//how we are able to access array with subscipt a[i]
    }
}

どちらのメソッドも配列の最初の数値のアドレスを渡すため、両方のメソッドが機能します。

于 2013-04-20T21:24:54.373 に答える