ソフトウェアベース

10305 ワード

13強。コンピュータが変数を処理する方法


どのようにC言語の中で各種の変数を処理します
ゾーン変数、グローバル変数、レジスタ変数
特定の関数に値またはアドレスを渡す方法について
コンピュータ・オペレーティング・システムは、メモリ・スペースを4つに分類して管理します.

13-1.グローバル変数


プログラム内の任意の場所でアクセスできる変数
main関数は、実行前にプログラムが起動しながらメモリに割り当てられます.
プログラムのサイズが大きいほど、グローバル変数はプログラムを複雑にします.
メモリのデータ領域にロードします.
#include <stdio.h>

int a=5;

void changeValue(){
	a = 10;
}

int main(void) {
	// your code goes here
	printf("%d\n",a);
	changeValue();
	printf("%d\n",a);
	system("pause")
	
	
	return 0;
}

13-2. ゾーン変数


プログラム内で特定のブレードのみでアクセスできる変数
関数は実行するたびにメモリに割り当てられ、関数の終了時にメモリから解放されます.
メモリのスタック領域に書き込みます.

13-3. せいてきへんすう


特定のネットワーク線でしか近づけない変数.
プログラム実行時にメモリに割り当てられ、プログラム終了時にメモリから解放されます.
メモリのデータ(データ)領域にロードします.
#include <stdio.h>

void process(){
	static int a = 5;
	a=a+1;
	printf("%d\n",a);
}

int main(void){
	process();
	process();
	process();
    system("pause");
    return 0;
}

13-4.レジスタ変数


メインメモリの変数ではなくCPUのレジスタを使う(急げ!)
レジスタは非常に限られており、本物のレジスタで処理される保証はありません.
処理速度が通常より速くなることが予想されます!
#include <stdio.h>

int main(void){
	register int a= 10, i;
	for(i=0; i<a; i++){
    	printf("%d",i)'
    }
    system("pause");
    return 0;

13-5.関数値伝達方式


-値で渡す
-参照による転送(ポインタ値による元の変数値の転送/アクセス);

14.多次元配列とポインタ配列


ポインタを使用した2 D配列複写

14-1ポインタアレイ


配列はポインタと同じです.
配列の名前は、配列内の要素の最初のアドレスになります.
ポインタは変数(変更可能)、配列の名前は定数です.(変えられない.)
#include <stdio.h>
int main(void){
	int a[5] = {1,2,3,4,5};
    int *b = a;
    printf("%d\n",b[2]);
    system("pause")'
    return  0;
}
ポインタは配列を参照できます.
参照定数を配列することは不可能です.
  • ダメなコード
  • #include <stdio.h>
    
    int main(void){
      int a = 10;
      int b[10];
      b = &a;
      system("pause");
      return 0;
    }