1日の3番目の8時間を充実させましょう!
以前に見た変数のほとんどは、関数で定義されたローカル変数であることがわかりました(関数に入ったときにのみ表示され、関数を終了した後は存在しません)
グローバル変数
1.関数の外部で定義された変数-グローバル変数
1>ライフタイムとスコープはグローバルです!
2>すべての機能を使用してアクセスできます。
2.グローバル変数の初期化:
1>コンパイラは、初期化されていないグローバル変数に値0を自動的に割り当てます。(ローカル変数はランダムな値です!)
2>初期化されていないグローバルポインタはNULL値を取得します。
3>コンパイル時に既知の値のみを使用してグローバル変数を初期化します
#include <stdio.h>
int gall = 1;//定义了一个全局变量gall 值为1
int gall2 = gall;//这句不行!!!是错误的,因为编译时gall算是未知量
int main(void)
{
......
return 0;
}
4>その初期化はmain()関数の前に行われます
5>グローバル変数を使用しないでください。それらの間にはいくつかの割り当て、操作などがあります。ファイル呼び出しがあるかもしれないので、混乱(順序か何か)があるかもしれません
たとえば、mainの前:
const int gall = 12; //ここにconstを追加すると、コンパイル時にgallの値がわかります。
int gall2 = gall;
そんなことしたらダメ!!!!
2.関数内にグローバル変数と同じ名前の変数がある場合、グローバル変数は関数内に非表示になり、グローバル変数は関数から出た後に再表示されます。
これは次のように理解できます。小さな場所で大きな場所に現れた変数を再定義すると、それらは非表示になります。
静的ローカル変数
1.ローカル変数が静的ローカル変数になる前に静的変数を追加する
2.関数を静的のままにする変数はその値を保持し、次に関数を入力したときは引き続き最後の値であり、再初期化されません(初期化は1回限りであることが理解できます)。
3.静的ローカル変数は実際にはグローバル変数です(グローバル変数、静的ローカル変数、およびローカル変数をカスタマイズして、それらのアドレスを出力すると、グローバル変数のアドレスがのアドレスに非常に近いことがわかります。静的ローカル変数ですが、ローカル変数に似ていますアドレスがとても悪いです)
4.静的ローカル変数にはグローバルな有効期間がありますが、ローカルスコープです。
グローバル変数を使用する際の注意点
1.ポインタを返す関数の場合
1>ローカル変数のアドレスを返すことは危険です。ローカル変数は関数を離れた後に存在しないためです。
2>グローバル変数と静的ローカル変数のアドレスを返すことは合法です
2.関数間でパラメーターと結果を渡すためにグローバル変数を使用しないでください!!
3.グローバル変数の使用を避けるようにしてください
4.グローバル変数と静的ローカル変数を使用する関数はスレッドセーフではありません(当面は理解する必要はありません)
大きい
1.前処理命令をコンパイルします。
#.....。
1>最初の#記号は、前処理命令をコンパイルするためのものです
2>コンパイルおよび処理命令は使用できません;セミコロン(C言語のコンポーネントではないため、理解してください/犬の頭ですが、C言語はそれなしでは実行できず、添付されているインクルードよりもC言語のキーワードではありません)
3> #defineはマクロを定義します(古いcにはconstがなく、マクロ定義defineを使用します)
# define PI 3.14159
#define <name> <value> //値にはスペース、文字などを含めることができます。
4>コンパイル前に前処理ステップがあります
5>マクロ定義が1行を超える場合は、\バックスラッシュを使用します
# define PRINT1 printf("hong");\
printf("hong");//这里的分号是PRINT常量里的!!!
6>マクロ定義には値がなく、条件付きコンパイルとしてよく使用されます
7>いくつかの事前定義されたマクロがあります
_FILE_
_LINE_
_DATE_
_TIME_
パラメータ付きマクロ
1.関数のようなマクロ
#define cube(x) ((x)*(x)*(x))
このようにして、次のことができます。printf( "%d"、cube(5));
実際、出力は((5)*(5)*(5))です。
2.次の点に注意してください。
すべてに括弧があります!:
パラメータが表示される場所には括弧を配置する必要があります
値全体(式)には括弧が必要です
3.複数のパラメーターを取ることができます(パラメーターには括弧を含めることを忘れないでください!)
4.セミコロンを追加しないでください!!!