C言語のレビューの問題

ブログと百度の様々なタイプからのコンテンツ。知識ポイントがより多くの散乱します。

C言語の配列を使用して定義されなければなりません。一次元アレイは以下のように定義される:
    [定数式]型指定子アレイ名、
角括弧内の定数式は、アレイの長さと呼ばれるデータ要素の数を表します。
定数式:式があっのみ一定値です。そのような10 + 5 + 3 / 1.0として、 "ABCD" は、定数式です。+ 10/7は定数式ではありません。
 すべての要素に割り当てられた、アレイ中の説明は、アレイ素子の数が与えられなくてもよいです。:例えば
[5] INT = {1,2,3,4,5};
のように書くことができる:
INT A [] = {1,2,3,4,5}。
文字の配列:
「」囲まれた文字列が自動的に末尾に「\ 0」を追加します。例えば、表面から「ABC123」はわずか6文字が含まれているように見える、それは真実ではない、C言語が暗黙のうちに最後に追加されます「\ 0」、このプロセスはバックグラウンドで静かに行って、私たちは感じています。
次の図は、「Cプログラムは」ケースのメモリに記憶されている例を示します。
Cプログラム\ 0
:配列割り当ての文字による文字が自動的に「\ 0」、例えば追加されないことに留意されたい
チャーSTR [] = {「A」、「B」、「C」}を、
アレイ列strの長さは3であり、そしてない4、最終的には何の「\ 0」が存在しないため。
文字列と文字列が格納されている場合は、特に注意を払って「\ 0」「\ 0」左の位置に、これは長さ、文字列よりも少なくとも1大きい文字の配列の長さを意味します。次の例を考えてみましょう:
文字列str [7] =「ABC123」;
「ABC123」のみ6文字が含まれているように見える、我々はSTR 7の長さとして定義されるシフト、それは「\ 0」最後に適応できるようにすることです。長さはSTR 6のように定義されている場合、それは「\ 0」までを受け取ることができません。
ストリング4の「ABCD」の長さ、文字列の長さは文字列内の有効な文字の数を意味するので、0 \ Cスタイルのターミネーターが含まれていない、
及びストリングアレイ5の[] =「ABCD」の長さ、これは、アレイ・カウントの長さであるので、それは(それはまた、ストレージスペースを取る必要があります)\ 0ターミネータが含まれるように、当然のことながら、占有収納スペースです。
[10] =「ABCD」が表示文字列の長さを指定するため、当然のことながら、メモリ10によって占有され、10で、そのメモリ空間は、連続しているの長さ
すなわち、10の文字スペース、それぞれ、正面A、B、C、D及び終了文字\ 0、0、\ 0 ABCDフロントエンドと文字で、(初期化する)全ての背後10の総0〜5の合計であり、それらの記憶は連続的ですA。
文字のA [] = {「A」、「B」、「C」、「D」}、定義に従ってない二重引用符、そうではないCスタイルの文字列だけ配列。しかし、サイズに名前を付けていなかった、その大きさは初期の長さに等しい、これは4で、4に等しいものsizeof、0 \ターミネータはありません。
「」文字列は自動的に「\ 0」の最後に追加ENCLOSED BY
文字によって文字と、自動的に配列の割り当て「\ 0」に追加されることはありません
関数定義の内部変数、配列、構造体、共用体およびいわゆるローカルデータ。多くのコンパイラでは、ローカルデータの初期値は、ランダム無意味であり、値が我々は通常のように考えるものではありません「ゼロ」。
文字列strの[30] = {0 }; // 全ての要素を0に初期化され、または「\ 0」であり
、配列の唯一の初期化部は、残りの配列要素が自動的に、「ゼロ」値に初期化する場合ので、我々は0に割り当てををstrするだけの0番目の要素、残りの要素は0です。
これは、関数呼び出しを入れ子にすることができますが、定義を入れ子にすることはできません。
外部機能:他の文書で使用可能な定義された関数呼び出しを省略するのexternデフォルト。
C言語であっても、引数としてポインタならば、値によって渡されます。
STRLENは、指定された文字列strの長さを計算するために使用される関数であるが、終了文字(すなわち、ヌル文字)を含みません。
SIZEOFキーワードは単項演算子と関数ではなく。異なる機能を有するSTRLEN、その引数は、配列、ポインタ、タイプ、オブジェクト、機能、等とすることができます
S * = CHAR "0123456789";
はsizeof(S); // 4 ===結果"sは文字列定数文字ポインタへのポインタで
はsizeofは(* S); //結果1 ===" * sが最初に文字
STRLEN(S); // === 10の結果は"10個の文字を持っている、strlen関数内部関数は、前に\ 0を計算するサイクルで実装されている
(* S)はstrlen; // === 10つながる"というエラーが

Sのchar [] = "0123456789";
はsizeof(S); // 11 ===が結果"Sしたがって、\ 0位置を計算するために、アレイは1 + 10。
STRLEN(S); // === 10結果" 10文字は、STRLEN内部関数は、計算サイクルにより実現される前にゼロに達する\すること
はsizeof(* S); // 1 ===「* sは最初の文字である結果
Sチャー[100] = "0123456789";
はsizeof(S); //結果は100 ===ある"Sメモリ内表現のサイズは1×100。
STRLEN(S); //結果は10 ===ある" STRLENれます実装前の内部関数は\ 0を計算することまでループです
Sはint [100] = "0123456789";
はsizeof(S); // 400 ===結果"Sは再びメモリのサイズを表す4×100。
STRLEN(S); //エラー===" STRLENパラメータのみchar *と、それはの終わりに「\ 0」に基づいていなければなりません
チャーQ [] = "ABC"。
チャーP [] = "の\ n"。
sizeof(Q)はsizeof(P)、strlenを(Q)、strlenを(P); \\结果是4 3 3 2
チャーP [] = { 'A'、 'B'、 'C'、 'D'、 'E'、 'F'、 'G'、 'H'};
CHAR Q [] = { 'A'、 ' B '' C '' D、 '\ 0'、 'E'、 'F'、 'G'};
はsizeof(P); //結果は、8 ===「pはメモリ8のサイズを表します1×
STRLEN(P); //ランダム値、およびコンパイラに関連する結果、コンパイラ異なる結果は、一般的に異なっている
のsizeof(Q); //結果は、8 ===「pは8×1のメモリの大きさを表しています
STRLEN(Q); // === 4の結果は、「何が'\ 0'遭遇ありません停止して算出した'\ 0'。
---------------------
オリジナルます。https://blog.csdn.net/magic_world_wow/article/details/80500473
構造体は、{
  
   char型。   
   int型のB;
   char型のC;
   ダブルD;
   } eは
なぜはsizeof(e)は、それのサイズは24である
(メモリアライメント)
バイト整列関連する詳細とコンパイラを達成するために:
1)第1のアドレスの可変構造はメンバーの最も広いサイズの基本的なタイプ分割することができる;
2)各構造の第一オフセットアドレス相対の構造体のメンバ(オフセット)部材の大きさの倍数であり、
合計サイズ3)構造体のサイズの整数倍の広いベースの構造型に
その最初のアドレスに対するBが4で割り切れなければならない、それは充填3つのバイトが続くべきであり、その最初のアドレスを作るためにdが8で割り切れる、それは前の7つのバイトのCで充填されなければならない;
従って:占め4、B 4を表し、C 8を占め、D自体8合計:24
機能のSTR家族ます。https://blog.csdn.net/We_are_family678/article/details/79671956
同じタイプは、二つのポインタ変数を加算することはできないが、それは、減算することができ。

おすすめ

転載: www.cnblogs.com/960571726y/p/11116870.html