3

検討:

1.

int one=1;
void func(int* ptr)
{
  ptr=&one;
}

int main() {
int nvar=2;
int* pvar=&nvar;
func(pvar);
std::cout<<*pvar<<std::endl;
return0
};

pvar のコピーが正しく作成されるため、2 が出力されますか?

2.

void func(int*& ptr)
{
  ptr=&one;
}

ポインターの参照が渡されているため、出力は 1 になります。すべて正常です。

3.

int one=1;
void func(int** ptr)
{
  *ptr=&one;
//or **ptr=one;
}
int main()
{
    int nvar=2;
    int* pvar=&nvar;
    func(&pvar);
    std::cout<<*pvar<<std::endl;

出力 1

正直なところ、 3番目の例が何であるかがわからないため、より適切な質問のタイトルを詳しく説明できませんでした.

4

2 に答える 2

4

3 番目の例は、ポインタを pvar ポインタに渡すため、2 番目の例とよく似ています。ポインターへのポインターとは、ポインターが指すものを変更できることを意味します。

ポインターへのポインター ( * ) とポインター参照 ( & )の主な違いは、ポインター参照を渡すたびに、ポインターを初期化する必要があることです (非 null で、適切に定義された値があります)。

于 2012-10-05T07:54:19.803 に答える
2

nvar3番目の例では、を含むローカル変数へのポインターを作成し、2このポインターへのポインターを、へのポインターに渡します。このポインターは、1を含むfuncグローバルへのポインターによって上書きされます。one次に、が指す値pvar、つまり、をone出力します1。(の場合、ポインターが指す変数// or **ptr=oneに値を入れoneます。これはnvar、同じ出力になります)。

于 2012-10-05T07:47:37.110 に答える