参照は 変数エイリアス
として存在するため、場合によってはポインタを置き換えることができます。参照はポインタよりも読みやすく実用的です。
関数内の参照パラメータは初期化する必要はありません。初期化は、2 を呼び出すときに完了します。特別な参照
const Reference
const 参照を宣言できます。具体的な使用法は次のとおりです:
// swap函数的实现对比 void swap(int& a, int& b) { int t = a; a = b; b = t; } void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; }
constReference let変数には読み取り専用属性があります。この読み取り専用属性は現在のエイリアス用です。変数は他の方法で変更できます。
const Type& name = var;定数を使用して
const を初期化する場合参照、C コンパイラ プロセッサは定数値用のスペースを割り当て、参照名をこのスペースのエイリアスとして使用します。
int a = 4; // a是一个变量 const int & b = a; // b是a的一个引用,但是b具有只读属性 int * p = (int *)&b; // p = &a b = 5; // err, 引用b 被const修饰,b是一个只读变量 a = 6; // ok printf("a = %d\n", a); *p = 5; // ok printf("a = %d\n", a);結論:
定数ペアの使用質問: 参照には独自の記憶領域がありますか?const
参照の場合、読み取り専用変数が生成されます
#include <stdio.h> void Example() { printf("Example:\n"); int a = 4; const int& b = a; int* p = (int*)&b; //b = 5; // b *p = 5; printf("a = %d\n", a); printf("b = %d\n", b); } void Demo() { printf("Demo:\n"); const int& c = 1; int* p = (int*)&c; //c = 5; *p = 5; printf("c = %d\n", c); } int main(int argc, char *argv[]) { Example(); printf("\n"); Demo(); return 0; }検証プログラム:
struct TRef { char& r; } printf("sizeof(TRef) = %d\n, sizeof(TRef));3. 参照の性質C における参照の内部実装は
ポインタ定数注: 1. C コンパイラは、コンパイル プロセス中に参照の内部実装としてポインター定数を使用するため、参照が占有する空間はポインターの空間と同じになります2 、使用の観点から見ると、参照は単なるエイリアスであり、C は使いやすさを考慮して参照の記憶領域の詳細を非表示にします。
#include <stdio.h> struct TRef { char& r; // 字符类型引用 }; int main(int argc, char *argv[]) { char c = 'c'; char & rc = c; TRef ref = { c }; // 用C进行初始化, TRef.r 就是 c的别名了 printf("sizeof(char&) = %d\n", sizeof(char&)); // char引用的大小,引用即变量本身,求所对应的变量本身的大小,即sizeof(char) = 1 printf("sizeof(rc) = %d\n", sizeof(rc)); // rc是一个引用,即sizeof(c) = 1 printf("sizeof(TRef) = %d\n", sizeof(TRef)); // sizeof(TRef) = 4 printf("sizeof(ref.r) = %d\n", sizeof(ref.r)); // TRef.r是 c的别名,sizeof(c) = 1 // sizeof(TRef) = 4 // 指针变量本身也是占4个字节 // 引用和指针的关系 return 0; }
参照の意味: C の参照は、ほとんどの場合ポインタを置き換えることを目的としています
- 機能性: を満たすことができますポインタを使用する必要があるほとんどの状況
- 安全性: 不適切なポインタ操作によって引き起こされるメモリ エラーを回避できます
- 操作: シンプルで使いやすい、まだ強力です
しかし、関数がローカル変数への参照を返す場合、
参照は変数を読み取らせることができます-only 属性参照の究極の本質はポインタです参照によりメモリ エラーを可能な限り回避できます
参照はコンパイラ内でポインタ定数を使用して実装されます
関連記事:
PHP におけるループと参照の落とし穴、PHP 循環参照
二重引用符の使用法 PHP の一重引用符の違い二重引用符付き
以上がC++ 参照の意味と参照の性質の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。