組込みソフトウェアエンジニア3 - C言語のサプリメント(1)

1

データの種類

  1. 基本タイプ:CHAR short int型long double型のフロート
    化合物の種類を:構造組合の配列
  2. 型のデータ型、本例の金型であればC言語の変数こと。変数がメモリに格納されている、我々はいくつかのメモリ空間を占有する必要があります。各データ型のメモリは、別のマシンのプラットフォーム上で異なっています。(典型的には、32ビットCPU)利用可能なのsizeofの計算演算子。

そこ符号付きと符号なしています

  1. 他の整数チャーint型のために、シンボル及び符号無し、とのために分割しないフロート、ダブルフロート例えば、唯一の符号付き数、符号なしの数。
  2. 変数はメモリに保存されています。場合バイナリファッションストアに格納されています。符号付きと符号なしの数値については、異なるストレージ。記憶された番号の内容全体は4バイト(32ビット)、符号付き数:int型、符号なしの32ビットシンボルは(最上位ビットを保持するために使用される1負のために、正の0を 31に残り、)保存されたデータのために。
  3. 絶対値では、符号なしの範囲が大きく示さ。
  4. フロートのためにこの浮動小数点型doule、それらはメモリに記憶され、同じではない整数。絶対に変数のアクセスモードを変更することはできません。

空のタイプ(無効)

  1. C言語のvoid型、いずれのタイプではなく、空の意味に代わって。その型が不明であることを意味任意のタイプは、まだ指定されていません。
  2. パラメータリスト機能は無効となります。これは、この関数の呼び出しにパラメータを渡す必要はありませ表しています。
  3. 関数は空の値を返します。関数は意味のある戻り値を返さないことを示しています。
  4. void *型:ポインタのいずれかのタイプ。絶対に変数のアクセスモードを変更することはできません。)コンパイラを使用して、型チェックを行う助けることができない、自分のアクセスタイプのために完全に責任があります。

1つの詳細

  1. バイトは8ビットです。

  2. strlenを:STRLENは、指定された計算するために使用される関数であり、文字列strの長さが、終了文字(すなわち、ヌル文字)を含みません。

  3. sizeof:のsizeofは単項演算子と関数ではなく。パラメータの配列、ポインタ、タイプ、オブジェクト、機能、及び上にあることができる、異なる機能を有するSTRLEN。関数はバイト単位で設立された最大の目標サイズに対応することが保証されます。

  4. 文字の配列とその2つの初期化

  1 #include<stdio.h>
  2 int main()
  3 {
  4     char a[] = "abcde"; // 6
  5     char b[] = {'a','b','c','d','e'}; // 5
  6     printf("sizeof(a) = %d,sizeof(b) = %d\n",sizeof(a),sizeof(b));
  7     return 0;
  8 }
  
结果为:sizeof(a) = 6,sizeof(b) = 5

1"abcde"实际上有6个字符,分别为'a','b','c','d','e','\0';
2'\0'这个字符是ASCII码的第一个字符,它的编码值是0'\0'是C语言中定义的字符串的结尾标志。所以当C语言程序中使用"abcde"这种方式初始化时,编译器会自动在字符'e'后面添加一个'\0'。所以变成了6个字符。

ポインタ

  1. ポインタフルネームはあるポインタ変数、およびその本質は、変数C言語です。この変数は通常、彼の価値は、あなたがこのような方法で、*はpを使用することができ、変数のアドレス値が割り当てられます、特別で、間接的にアクセスする変数pポイントを。
  2. int型* P;定義されたポインタ変数pを、ここでは意味を定義することをコンパイラに伝えることです* pはポインタ変数です。
  3. * P = 123;場合ポインタ変数、ポインタ変数p点の* P表します。
  4. 様々なポインタ
指针变量本质是一个变量,指针变量的类型属于指针类型。

1 int *p;// 定义了一个指针类型的变量p,这个p所指向的那个变量是int型。

1 int a;
2 float *p;
3 p = &a;//warning: assignment from incompatible pointer type

各种指针类型和它所指向的变量类型必须匹配,否则结果不可预知。
  1. 予備は、ポインタの配列と組み合わせます
数组名:做右值时,数组名表示数组的首元素地址,因此可以直接赋值给指针。
1 int a[5];//a 和 &a[0]都表示数组首元素a[0]的地址,而&a表示数组的首地址。
注意:数组首元素的地址和数组的首地址是不同的。前者是数组元素的地址,后者是数组整体的地址。两个含义不同,但数值上是相同的。
1 int a[];
2 int *p;
3 a = p;
//编译报错,因为数组名是个常量,所以不能赋值,数组名不能做左值。
  1. ポインタ機能を渡すパラメータに使用されます
1 int add(int a,int b)
//实际调用该函数时,实参将自己拷贝一份,并将拷贝传递给形参进行运算,实参自己实际是不参与的。所以,在函数中,是没法改变实参本身的。

  1 #include<stdio.h>
  2 
  3 int swap(int &a,int &b)
  4 {
  5     int t;
  6     t = a;
  7     a = b;
  8     b = t;
  9 }
 10 int main()
 11 {
 12     int a = 2,b = 3;
 13     swap(a,b);
 14     printf("a = %d\n",a);
 15     printf("b = %d\n",b);
 16     return 0;
 17 }
 
  输出:	a = 2
	 	b = 3
 参数是a,b的地址
  1 #include<stdio.h>
  2 
  3 int swap_pointer(int *a,int *b)
  4 {
  5     int t;
  6     t = *a;
  7     *a = *b;
  8     *b = t;
  9 }
 10 int main()
 11 {
 12     int a = 2,b = 3;
 13     swap_pointer(&a,&b);
 14     printf("a = %d\n",a);
 15     printf("b = %d\n",b);
 16     return 0;
 17 }
 
输出:	a = 3
		b = 2

ローカルおよびグローバル変数

  1. 初期化時に定義されていないが、ローカル変数の値がランダムで、値0は、デフォルトのグローバル変数です。
  2. グローバル変数の使用ファイルスコープ(ファイル全体)、及び、ローカル変数のスコープ({})でコードブロック
  3. プログラムが実行を開始する前に、ライフサイクルは、グローバル変数を初期化フェーズで生まれて、それが死んだとき、プログラム全体の両端が終了し、そして時にコードブロックが終了ローカル変数のコードを入力するときに生まれたローカル変数は、死亡しました。
  4. 位置の分配、グローバル変数に割り当てられたデータセグメントで、ローカル変数をスタックに。
  5. データ・セグメント:番号が格納され、グローバル変数データ部の存在。コードセグメント:コードが格納され、典型的にはリードオンリー。スタック(スタック):最後のうち、ローカル変数のスタックがあります。

ローカル変数

  1. **静的ローカル変数(静的)**メモリが解放されていない、およびグローバル変数は非常に似ています。呼び出された関数が、main関数呼び出しの終わりで、通常のローカル変数(自動)メモリが解放されました。
  2. レジスタ(レジスタ)ローカル変数の種類とローカル変数の一般的な性能と呼ばれる最速のC言語変数C言語はその変数アクセススピードが早く登録し、(一般的な変数がメモリ内にある)を実行するレジスタに変数を登録します。レジスタの数が制限されるためしかし、それは、制限され、そして第二のデータ・タイプには限界レジスタ変数が存在し、例えば、タイプダブルレジスタの変数を定義することはできません。一般的にのみカーネルやブートコードでは、あなたが繰り返しレジスタ変数を使用する同じ変数を使用する必要があります。

グローバル変数

  1. 主な機能が実行される前に定義し、グローバル変数の初期化が発生します。
  2. 一般的なグローバル変数は、個々のファイルで使用することができ、そう確か変数名は一意でなければなりません作り、プロジェクト内の別の.cファイルで見ることができます。静的なグローバル変数は、同じ名前の問題を解決することです。これは、現在ではこの変数ことをコンパイラに伝えます。このドキュメントの中の使用は、その名前の重複の心配はありませんが。

変数のクロスリファレンスファイル

  1. 使用すると、キーワードのextern宣言に変数クロスファイルを

定数

  1. #define N 20
  2. constの:のconstポインタと組み合わせて、4つの形式があります
    constのint型* P:Pは、int型へのポインタのポインタです。Pデータポイントは一定です。
    int型のconst * P:pはポインタ、int型へのポインタです。Pデータポイントは一定です。
    int型* constのP:pはポインタ、int型へのポインタです。P自身は定数、pは可変のデータポイントです。
    const int型* constのP:pはポインタ、int型へのポインタです。P自身は定数は、p個のデータ点が一定です。

ヘッダファイルの導入

  1. 書式#include <>:ヘッダファイルに来るシステムが含まれています。
  2. #include「」:カレントディレクトリにあるヘッダファイルをインクルードします。
  3. 防止重複ファイルヘッダが含まれています
#ifndef _A_H_
#define _A_H_


#endif
公開された64元の記事 ウォン称賛27 ビュー5797

おすすめ

転載: blog.csdn.net/qq_43675371/article/details/104400353