目次
3.1. コンパイラが \0 を探して文字列が終わるかどうかを判断していることを確認するにはどうすればよいですか?
3.2. 終了記号 \0 が文字列長にカウントされていないことを確認するにはどうすればよいですか?
3.3. 終了記号 \0 が文字列の内容に含まれていないことを確認するにはどうすればよいですか?
最初の部分、変数について
1. 変数とは何ですか? 変数の分類?
変数:体重、年齢など、変更できる量は変数と呼ばれます。
変数の分類:グローバル変数とローカル変数に分けることができ、グローバル変数: main{} の外側で定義された変数、ローカル変数: main{} の内側で定義された変数。
2. 変数の範囲は何ですか? 変動する寿命?
スコープ:変数が機能できる範囲であり、それを超えると使用できなくなります。例:ファイル間の変数は extern を使用して実装する必要があります。
ライフタイム:変数が作成および破棄される期間。
後半部分、定数について
1. 定数とは何ですか?
定数: 円周率、性別など、変更できない数量。
2. 定数を定義するにはどうすればよいですか?
- const int a = 10; const 変更された定数変数 (紛らわしい静的)
- enum 名 { a, b, c }; enum 定数
- #define 最大 10; #define 定義された定数
例は次のとおりです。
#define max 100;
enum SEX
{
aa,//从0开始算
bb = 2,
cc
};
int main()
{
//const 修饰的常变量
const int a = 10;//此时a值无法改变,但是a只能称作常变量,还是属于变量范畴,让a做a[a],是错误的
printf("%d\n", a);
//宏定义的常量
int max1 = max;
printf("%d\n", max1);
//枚举常量
enum SEX val1 = aa;
printf("%d\n", val1);
return 0;
}
第三部、文字列について
1. 文字列とは何ですか?
二重引用符で囲まれた文字列を文字列と呼びます。
注:文字は一重引用符で囲まれ、文字列は二重引用符で囲まれるため、単一文字には一重引用符を使用し、文字列には二重引用符を使用します。
//下面这两句话是等效的,%c打印一个字符,和单引号‘’相对应
//%s打印一个字符,和双引号“”相对应
printf("%s\n","a");
printf("%c\n",'a');
2. 文字列配列を定義するにはどうすればよいですか?
- 方法 1: char val[] = "aaasdadasfd";
- 方法 2: char val[] = {'a','a','a','d','a','s','f','d','\0'};
注:中かっこがある場合は一重引用符を使用し、中かっこがない場合は二重引用符を使用します。
たとえば、間違った式: char val[] = {"aaasdadasfd"}; これは間違った定義であり、そのような定義はありません。
3. 文字列の終了記号は?
まず、コンパイラでは、文字列に終了記号、つまり \0 が含まれている必要があります。これは、メモリ内で文字列を検索するとき、または文字列の長さを計算するときに、終了記号を見つける必要があるためです。何対何は文字列です。
注:文字列の終了マークは、\0 のエスケープ文字です。コンパイラは、文字列の末尾に \0 があるかどうかで文字列が終了するかどうかを判断しますが、\0 は文字列の内容とみなされません。文字に含まれる文字列の長さ(下のスクリーンショットに示すように、strlen はカウントされませんが、sizeof はカウントされます)。
3.1. コンパイラが \0 を探して文字列が終わるかどうかを判断していることを確認するにはどうすればよいですか?
3.2.終了記号 \0 が文字列長にカウントされていないことを確認するにはどうすればよいですか?
3.3. 終了記号 \0 が文字列の内容に含まれていないことを確認するにはどうすればよいですか?
4 番目の部分、エスケープ文字について
1. いつ逃げる必要がありますか?
例: C 言語コンパイラでは、次のように \n が改行に使用されることは誰もが知っています。
printf("\n");//换行
ここでは折り返すのではなく、\n の 2 文字を単純に出力したいだけです。印刷するにはどうすればよいですか?
\n 改行の意味を 2 文字に変換するには、これをスラッシュ \ でエスケープする必要があります。次のように:
上記の例の分析を通じて、特定の 2 文字または複数の文字が組み合わされると、C コンパイラはデフォルトで特定の関数を持っているため、これらの文字を出力せず、それらの組み合わせを関数で実現することがわかります 。
つまり、コンパイラが印刷したい現在の内容を認識できない場合、この時点で印刷したい内容を実現するにはスラッシュ \ を使用してエスケープする必要があります。
2. 一般的なエスケープ文字
エスケープ文字 | 意味 |
\' |
文字定数を表すために使用されます。 |
「 |
文字列内の二重引用符を表すために使用されます。 |
\\ |
バックスラッシュを表すために使用されます \ |
\n |
改行 |
\r |
キャリッジリターン |
\t |
水平タブ(ライン出力タブ) |
\v |
垂直タブ(列出力タブ) |
\ddd |
ddd は、ASCII コード表に対応する 1 ~ 3 の 8 進数を表します。 |
\xdd |
dd は 2 つの 16 進数を表し、ASCII コード表に対応します。 |
\a |
警告文字、ビープ音 |
\b |
バックスペース |
\f |
フィード文字 |
3. 練習する
次の文字列の長さを数えます。
char arr[] = "c:\test\628\test.c";
結果は次のようになります: 14.
ここで理解する必要があるのは、\628 は上記の表の特殊エスケープ文字 \ddd に非常に似ていますが、8 進データの 8 は 8 進数を超えているため、8 は 1 文字としてカウントされることに注意してください。\62 は特殊文字としてカウントされます。