C とポインター (1)
前処理ディレクティブ
プリプロセッサは、対応する#include
命令ステートメントをライブラリ関数ヘッダー ファイルの内容に置き換えます。
ヘッダー ファイルを使用すると、stdio.h
標準 I/O ライブラリの関数にアクセスできます。
別のタイプの前処理ディレクティブは #define で、後でこの名前がソース ファイルのどこかに現れると、定義された値に置き換えられます。
int read_column_numbers ( int columns [ ] , int max );
void rearrange ( char *output, char const *input , int n_columns, int const columns[] );
これらの宣言は関数プロトタイプと呼ばれます。これらは、後でソース ファイルで定義される関数の特性をコンパイラに伝え、これらの関数が呼び出されたときにコンパイラが関数の正確性をチェックできるようにします。各プロトタイプは、関数の戻り値の型を示す型名で始まります。戻り値の型の後には関数の名前が続き、その後に関数が受け入れることが期待されるパラメーターが続きます。したがって、この関数はread_column_numbers
整数を返し、整数配列と整数スカラーの 2 種類のパラメーターを受け入れます。
rearrange
この関数は 4 つのパラメータを受け入れます。最初と 2 番目のパラメータはポインタです。ポインタは、コンピュータのメモリに格納されている値のアドレスを指定します。2 番目と 4 番目のパラメーターは として宣言されていますconst
。これは、関数が関数呼び出し元によって渡された 2 つのパラメーターを変更しないことを意味します。キーワードはvoid
、関数がパラメータを返さないことを示します。他の言語では、この返さない関数はプロシージャと呼ばれます。
メイン機能
int main( void )
main はプログラム実行の開始点です。
C 言語では、配列パラメータは参照によって渡されます。つまり、アドレスによって呼び出しますが、スカラーと定数は値によって渡されます。
関数に渡されるすべてのパラメータは値によって渡されます。
今日のソフトウェアの最大の費用は、ソフトウェアの作成ではなく、その保守です。
一般的に使用される printf 形式のコード:
フォーマット | 意味 |
---|---|
%d | 整数値を 10 進数形式で出力します |
%o | 整数値を 8 進数形式で出力します |
%s | 整数値を 16 進形式で出力します |
%g | 浮動小数点値を出力する |
%c | 文字を印刷する |
%s | 文字列を出力する |
scanf
関数内のすべてのスカラー パラメータの前に「&」記号を付ける必要があります。配列パラメータの前に「&」記号を付ける必要はありません。ただし、添字参照が配列パラメータに追加される場合、それは実際のパラメータがは配列内の特定のパラメータです。特定の要素の前に「&」記号を付ける必要があります。
scanf ( "%d", &columns[num] )
一般的に使用される scanf 形式のコード:
フォーマット | 意味 |
---|---|
%d | 整数値 int を読み取る |
%ld | 長い整数値を読み込む |
%f | 実数値(浮動小数点数)floatを読み込む |
%lf | 倍精度実数値 double を読み取る |
%c | 文字を読み取る |
%s | 入力から文字列 char 配列を読み取ります |
&&
これは「論理 AND」演算子です。&& 演算子の両側の式が true の場合、式全体が true になります。左側の式が false の場合、右側の式は評価されません。
=
代入演算は比較演算ではありません。
return ステートメントは、呼び出し元の式に値を返す関数です。
C语言的for语句:for ( col = 0; col , n_columns; col += 2) {
初始部分, 测试部分, 调整部分
実行: プログラムをメモリにロードする必要があります。プログラム コードが実行されると、ローカル変数と関数の戻りアドレスを格納するために使用されるランタイム スタックが使用されます。プログラムは静的メモリを使用することもでき、静的メモリに格納された変数はプログラムの実行中その値を保持します。
基本データ型: 整数ファミリーには、文字、short integer、integer、long integer が含まれており、符号付きと符号なしに分けられます。
整数値の互いのサイズに関する規則は次のとおりです。long は少なくとも integer と同じ長さ、integer は少なくとも short と同じ長さです。
フォーマット | 意味 |
---|---|
文字 | 0~127 |
符号付き文字 | -127~127 |
符号なし文字 | 0~256 |
短い整数 | -32767 ~ 32767 |
unsigned short int | 0~65535 |
整数 | -32767 ~ 32767 |
符号なし整数 | 0~65535 |
長い整数 | -2147483647 ~ 2147483647 |
符号なし長整数 | 0 ~ 4294967295 |
short int 至少16位,long int 至少32位。
定数と変数
整数リテラル
リテラル値とは、リテラル定数の略称で、独自の値を指定し、変更を許可しません。名前付き定数 (const として宣言された変数) と通常の変数の違いは、初期化後に値を変更できないことです。
整数リテラル値の後に文字L
または を追加すると、l
整数は として解釈されますlong整数值
。文字U
または は、u
数値を として指定するために使用されますunsigned整型值
。リテラル値の後に追加するとUL
、 として解釈されますunsigned long整型值
。
16 進数は 0x で始まり、8 進数は 0 で始まります。
文字定数 int 型。
'M' '\n' '\377' のように、一重引用符で囲まれた単一の文字 (または文字のエスケープ シーケンスまたは 3 文字の単語) です。この後ろに L または l が続いて long double 値を示すか、F または f が続いて float 値を示します。
ポインタ:
変数はコンピュータのメモリに保存され、それぞれが特定の場所を占めます。各メモリ位置はアドレスによって一意に識別され、参照されます。
文字列定数は、二重引用符で囲まれた文字列です。「Hello」「\aWarning!\a」「」 空の文字列であっても、ターミネータとして NUL 記号が含まれます。
基本的なステートメント:
変数宣言の基本形式は次のとおりです。 指定子 (1 つ以上) 宣言式リスト 指定子には、
宣言された識別子の基本タイプを記述するために使用されるキーワードが含まれます。指定子を使用して、識別子のデフォルトのストレージ タイプとスコープを変更することもできます。
Int I; char j, l, l;
初期化は、変数名の後に等号 (代入記号) を付け、その後に変数に代入する値を続けることによって行われます。Int j = 15;
単純な配列を宣言します int value[ 20 ]; 20 個の整数要素を含む整数配列を宣言します。配列の添字は 0 から始まり、最後の要素の添字は要素数から 1 を引いたものになります ポインター
int a; を宣言します このステートメントは、式 a によって生成される結果の型が int であることを示します。* 演算子が間接アクセス操作を実行することがわかれば、 a が int へのポインタであると推測できます。
[間接アクセス操作はポインター変数に対してのみ有効です。ポインタは結果の値を指します。この結果値は、ポインタに対して間接アクセス操作を実行することによって取得できます。】
int* b, c, d; エラーのアスタリスクは実際には式 *b の一部であり、この識別子にのみ役立ちます。b はポインタですが、他の 2 つの変数は単なる通常の整数です。3 つのポインターを宣言するための正しいステートメントは次のとおりです。 int *b, *c, *d;
ポインター変数を宣言するときに、その変数の初期値を指定することもできます。Char *message = "Hello world!"; このステートメントは、message を文字へのポインタとして宣言し、文字列定数の最初の文字のアドレスでポインタを初期化するために使用されます。前のステートメントは次と同等です:
char *message; message = " Hello world! ";
暗黙的な宣言:
C言語には型名を省略できる宣言がいくつかあります。関数が戻り値の型を明示的に宣言していない場合、デフォルトで整数を返します。
typedef
: さまざまなデータ型に新しい名前を定義できます。
char *ptr ; 変数 ptr を文字へのポインタとして宣言します。=> typedef char *ptr ; 識別子 ptr を文字型へのポインタの新しい名前として使用します。この新しい名前 ptr a は、 a が文字へのポインタであることを宣言する次の宣言で使用できます。新しい型名を作成するには、代わりに
を使用する必要があります。後者はポインター型を正しく処理できないためです。typedef
#define
#define d_ptr_to_char char * d_ptr_to_char a ,b ;
a は正しく宣言されていますが、b は文字として宣言されています。Typedef は、関数ポインタや配列へのポインタなどの複雑な型名を定義する場合に適しています。
絶え間ない:
常量和变量完全一样,只是它们的值不能被修改。 如: int const a; const int a; 都可以赋值 int const a = 15;