A.グローバル変数
、関数、変数の外で定義•グローバルされている
•グローバル変数はグローバルスコープと寿命を持っている
彼らは、任意の関数とは何の関係もない•
彼らは任意の内部関数で使用することができます
II。グローバル変数が初期化されている
•グローバル変数は0の値を取得初期化しない
•ポインタがNULL値を取得します
のみ既知の値との•の使用をコンパイル時にグローバル変数を初期化するために
彼らの初期化•main関数の前に発生
書式#include <stdio.hに> int型 F(無効)。int型ガル= 12 ; INTメイン(int型 ARGC、チャーCONST * ARGV []) { のprintf(" %sのガル=%d個の\ nの"、__ FUNC __、胆嚢)。 // __func__打印函数名字 F()。 printf(" %sのガル=%d個の\ nにおけるAGN " 、__ FUNC __、胆嚢)。 リターン0 ; } int型 F(ボイド) { のprintf(" %sのガル=%d個の\ nの" 、__ __ FUNC、ガル)。 ガル + = 2 ; printf(" %sのガル=%d個の\ nにおけるAGN " 、__ FUNC __、胆嚢)。 返す胆嚢を。 }
隠されたグローバル変数
•内部関数の変数と同じ名前のグローバル変数が存在する場合、グローバル変数が隠されています
III。スタティックローカル変数
に加えて、静的な修飾子で定義されたローカル変数•は、静的ローカル変数になります
•場合は、静的ローカル変数の機能を残して存在し、その値を保持し続けます
•静的ローカル変数を初期化すると、あなたがこの関数を入力し、初回のみである関数を入力するときに、あなたが去ったとき、未来は値を保持します
•スタティックローカル変数は、実際には、特別なグローバル変数である
彼らは、メモリの同じ領域に位置しています
関数内でグローバル生存、ローカルスコープを持つ静的ローカル変数•
•静的には、ここでローカルスコープ(ローカルにアクセス可能)を意味します
書式#include <stdio.hに> int型 F(無効)。int型ガル= 12 ; INTメイン(int型 ARGC、チャーCONST * ARGV []) { F()。// F()。 // F()。リターン0 ; } int型 F(ボイド) { int型のk = 0 。 静的なint型のすべて= 1 ; printf(" &胆嚢=%P \ n "、&ガル)。 printf(" &すべて=%N- \ p型")、およびすべて; // 静的ローカル変数が実際に特別なグローバル変数である のprintf(" N- \&K =%のp- "& K); のprintf(" %でSのすべて=%D \ N- " 、__ __ FUNC、すべて); すべての + = 2 ; のprintf(" AGNで%S%すべてD = \ N- " 、__ __ FUNC、すべて); 戻りすべて; }
IV。*リターンポインタ機能
•は、変数のローカルアドレスが危険である返し
安全•グローバル変数または静的ローカル変数のアドレスを返している
メモリは安全が、問題を引き起こす可能性がある中で•戻りmalloc関数は、
•ベストプラクティスは、入ってくるのポインタを返すことです
書式#include <stdio.hに> int型 * F(無効)。 空隙 G(空隙)。 INTメイン(int型 ARGC、チャー CONST * ARGV []) { int型 *のP = F()。 printf(" * P =%d個の\ n "、* P); G()。 printf(" * P =%d個の\ n "、* P); リターン 0 ; } のint *のF(ボイド) { int型 = Iを12 。 printf("&I =%のPを\ n "& I); 戻り&I; } 空隙 G(ボイド) { int型のk = 24 ; のprintf(" &K =%Pを\ n "& K); のprintf(" K =%dの\ n " 、K); }
ヒント
•パラメータと機能の間に結果を渡すために、グローバル変数を使用しないでください
•グローバル変数を使用しないようにしてください
トヨタの場合•
スレッドによって妨害され、グローバル変数と静的ローカル変数を使用して•*機能を