財団
- シーケンシャル構造、選択構造(分岐構造)、環状構造:プログラム構造は三種類です。
- その後、プログラムは、トップダウン(出会いの選択に選択し、出会いのループサイクルを行う)、そして唯一の主要な機能から順に読んで、main()のエントリから読み取る必要があります。
- コンピュータのデータは、記憶装置位置にバイナリ形式で保存されている彼のアドレスです。
- ビットは、ビット0又は1意味です。それは、バイト、バイト、8ビットバイト=を指します。
多くの場合、テスト
- プリプロセッサは、C言語の一部ではない実行している時間を考慮していない、セミコロンを追加しないでください。
C言語でコンパイルされたプログラムは、テキストファイル内のASCII値に格納されたソースコードと呼ばれます。 - PI 3.1415926は、DEFINE 、この文言は間違っている、とセミコロンはいけません。
- すべてのC言語プログラム主な機能は、1つのみです。
- 長い機能をNOできる機能で定義されています。
- アルゴリズム:入力することはできませんが、出力でなければなりません。
- 環状構造を打破し、switch文に用いることができます。
- 最低レベルコンマ演算子、最後から二番目のレベルの割り当て。
- int型* P違い* pとP:それは単に* Pのある値 pは、アドレス!
- * P:として使用することができ、変数を使用すること; *アクションは、アドレス値p内側後に撮影されています。
- P-は:として使用されているアドレスを使用します。これは、関数scanf関数で使用することができる:scanf関数( "%のD"、 P);
- の* P ++および(* P)との差++: (書か強調)
- * pは++:あるアドレス変更。
式:現在の値は、モバイルアドレスを取ります! (* P)++:される値が変更されます。
式:現在の値をとり、その値は1つのので、インクリメントされます。例: INT * P、A [] = {1,3,5,7,9};
P = A;
ウィル* P ++および値(* p)は++それぞれ?
* P ++:自身でこの値は1です。アドレスを1インクリメントするので、値3へのポインタであろうからです。
(* P)++:自身でこの値は1です。++は、値が増加を示しているので、ポインタが移動しないが、値1となるので、自主2。
- * pは++:あるアドレス変更。
- 二つのポインタ:
- * P:ポインタ:変数の格納アドレス。
** Q:二つのポインタ:ストレージ・アドレスへのポインタ。
多くの場合、試験対象: int型= 7 X-; int型* = P-&X-、P - ** = qは、
あなたを求める:* pはどのくらいですか?* Qどのくらい?** Qどのくらい?
* P = 7、* Q = P、** Q = 7
尋ねる:** Q =&X、それを書くことができますか?いいえ、ポインタを格納するための2つだけポインタアドレス。
- プログラムがコンパイルされると、しないようにパラメータを形成割当記憶摩耗の間。のみ、それが呼び出されたときに、仮パラメータは一時的にしか保存スペースを占有します。キーワードと仮パラメータの自動ステートメントストアのカテゴリを作り、キーワード「自動」を省略することができますが、自動動的なストレージである「自動ストレージ・クラス」として識別暗示書いてはいけません。
- 蓄積型関数は、関数名蓄積型データ型の前に上記で定義された関数であり、デフォルトではなければならない:EXTERN属外部関数は、関数(すなわち、ことを示して本文書Cの外に他のCソース・ファイルの関数とすることができますコール)
- EXTERN:
のためにプロジェクト全体見え、他のファイルは、外部のextern宣言の後に直接使用することができます。他の文書は、その(そうでない場合、コンパイラは、彼らが同じ変数だと思います)と同じ名前の変数を定義することができません - 静的:静的な世界の代表
だけに、現在のファイルにアクセスできなく見え、他のファイルは、他の変数は両方互いに独立して、同じ名前のファイルを定義することができます。
- EXTERN:
重点
- およびsizeof STRLEN(強調)との差:
- sizeof: (求めている実際の収納スペースが)
、それは唯一のものであることから、同じことをマクロと同等であるオペレータではなく、機能よりも、コンパイル時の定数が展開され、各変数定義テーブルの翻訳は、はsizeof変数は、ルックアップテーブルによって決定しました決定すべきプロセスにメモリを割り当てる前にあるスペースを占有。
実際には、単に理解することができるのsizeofである「タイプ」のためのむしろ「可変」より *括弧のconst char型ではなく、「文字列」、はsizeof(「HELLO」)、そのようなので、この時点でそのように見ることができません5.したがって、結果として、しかしのサイズ:
char *ps = "HELLO"; sizeof(ps) = 4 //只是指针的大小,即 地址(整数类型占4个字节) sizeof(*ps) = 1 //*ps+0代表数组第一个元素的大小,即ps[0] char as[8]; sizeof(as) = 8 //因为as的类型为 char [8],这个大小的确是8 sizeof(*as) = 1 //*as+0代表数组第一个元素的大小,即as[0] char aa[8][9]; sizeof((char *)aa) = 4 //还是 char * char arr[100] = "HELLO"; sizeof(arr) = 100 //和赋什么值没什么关系,关键是"类型"是什么 int func(char p[100]) { sizeof(p) = 4; /*C/C++中不能传数组,只能传指针,所以任何数组都会隐式转成指针形式进行操作。*/ }
- STRLEN: (必要な文字列の長さ、すなわち、ターミネーターを含まない文字の数)
であるの関数パラメータが、その実現をクリア「\ 0」末端(文字列、カウント停止を満たしているCONSTのchar *ですが、それは)「\ 0」が含まれていません。だから、見ているが、変数の型を見て、変数の値が割り当てられているものに応じていません。
- sizeof: (求めている実際の収納スペースが)
- 再帰関数は確かに行います。
二つの重要な配列の長さ:
文字A [] = { 'A'、 'B'、 'C'}、長さ3の配列、不定長さの文字列(NOがあるので'\ 0'ターミネーター)。sizeof(A)は3です。
CHAR [5] = { ' '、 'B'、 'C'}; 配列5、3の文字列の長さ。sizeof()5。
CHAR [] = { ' '、 'B'、 'C'}; これは、文字列を表す、3バイト。
[] =「ABC」をチャーそれは、異なっている文字列、そして最後に「\ 0」ターミネータがある表す、4つのバイトが。- scanf関数との違いを取得します。
入力が良い良い研究であるならば!- scanf関数( "%s"は、
); 唯一の良いを受け取ります。テストサイト:無効なスペースを受信します。(遭遇スペースまたはキャリッジリターンを終了します) - 取得();
良い良い研究テストサイトを受け取る:収容スペースができます!(発生しまし入力終了)
- scanf関数( "%s"は、
ポインタのテストサイト:
CHAR CH [] = "iamhandsome";
CHAR * P-CH =;
あなたを求める:*結果(P + 2)と* P + 2の番号ですか?
*(P + 2)= ' M' * P + 2 = K ''分析:
最初のものは+2のアドレスであるので、Mをとり、
第2の値は+2であり、すなわち、ASCII値+ 2、IJKをので、Kを取ります。- ストリング割り当て:
C言語の文字列変数ではないので、文字列配列とポインタを格納されました:- チャーCH [10] = { " ABCDEFGH"}; のため
- チャーCH [10] = "ABCDEFGH "; のため
- チャーCH [10] = { ''、 'B'、 'C'、 'D'、 'E'、 'F'、 'G'、 'H'}; 对
- char * p = "ABCDEFGH"; のため
- char * P; へ
- CH = "ABCDEFGH"; 間違いました!配列名を割り当てることはできません!(一方のみサイクル割当)
- char * p = { "ABCDEFGH" }; 間違っています!中括弧を表示することはできません!
マクロ定義defind
問題: X * X(X * X)との差との#define F(X)の#define F( X)。
次の形式で定義されているC言語でマクロ定義のキーワードを定義します。
#define [MACRONAME] [MacroValue】通常のマクロ定義マクロ定義マクロ定義およびパラメータに分かれ
共通マクロ定義:の#define PI(3.1415926)
パラメータは、マクロ(マクロ機能)を定義:の#define MAX(A、B)((A)>(B)(A)、(B)?)
注:括弧で囲まれたマクロ変数に。
C言語で、コンパイル時にマクロを定義展開される、としても知られている交換、「だます」、ので交換する「リテラル」を、何の括弧がない場合は誤解を招くかもしれません。以下のような:
int a,b,c,d,e; a=1;b=2;c=6;d=4; e=f(a+b) * f(c+d) ; //理论值e=9*100=900 #define f(x)(x*x) 替换结果为:e=(a+b*a+b)*(c+d*c+d) = 5*34=170 #define f(x) x*x 替换结果为:e=a+b*a+b*c+d*c+d=1+2+12+24+4=43 #define f(x) ((x)*(x)) 替换结果为:e=( (a+b)*(a+b)*(c+d)*(c+d) )=3*3*10*10=900
これは、私たちが望む結果です!