ホームページ >バックエンド開発 >C++ >ポインタは C で引数として、値または参照によってどのように渡されますか?

ポインタは C で引数として、値または参照によってどのように渡されますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-06 16:56:141018ブラウズ

How Are Pointers Passed as Arguments in C  , by Value or by Reference?

ポインター引数の受け渡し: C での値渡しまたは参照渡し

C では、通常、引数はポインターを含めて値渡しされます。ポインタが引数として渡されると、それが指すオブジェクトのアドレスが関数のパラメータにコピーされます。これは、関数内でポインター自体に加えられた変更は関数の外部には反映されないことを意味します。

ただし、元のオブジェクトが変更されるため、ポインターが指すオブジェクトに加えられた変更は反映されます。ポインタ参照。したがって、ポインタへのポインタを関数の引数として使用して、その関数内のポインタ値を変更することは許容され、標準的な手順です。

たとえば、次のコードを考えてみましょう。

void ModifyPointer(int **ptr) {
  *ptr = new int;
}

int main() {
  int *ptr = new int;
  ModifyPointer(&ptr);
  return 0;
}

このコードでは、ModifyPointer 関数はポインターへのポインターを引数として受け取ります。関数内では、新しい int オブジェクトが割り当てられ、パラメーターによって参照されるポインターが新しいオブジェクトを指すように更新されます。

元のポインターは pointer to pointer を通じて変更されるため、変更はメイン機能。 ptr 変数は、新しく割り当てられた int オブジェクトを指すようになりました。

C では、可能な限りポインターの代わりに参照を使用することが推奨されます。参照はポインタと同様の機能を提供しますが、より簡潔な構文と強力な型チェックを備えています。

たとえば、上記の例は参照を使用して書き換えることができます。

void ModifyPointer(int *&ptr) {
  ptr = new int;
}

int main() {
  int *ptr = new int;
  ModifyPointer(ptr);
  return 0;
}

以上がポインタは C で引数として、値または参照によってどのように渡されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。