変数の格納方法
8564 ワード
変数は静的記憶方式と動的記憶方式に分けられる
静的記憶方式とは、プログラムの実行中にシステムによって固定された記憶空間が割り当てられる方式である
動的記憶方式は、プログラムの実行中に必要に応じて動的に記憶空間を割り当てる方式である
C言語の各変数と関数には、データ型とデータの格納カテゴリの2つの属性があります.
ストレージカテゴリとは、静的および動的ストレージ、動的ストレージなどのデータがメモリに格納される方法を指します.
Cのストレージカテゴリは4種類あります.
自動(auto)、静的(static)、レジスタ(register)、外部(extern)
ローカル静的変数はどのような場合に必要ですか?関数の前回の呼び出しが終了したときの値を保持する必要があります.例えば、階乗nを求める必要があります.
レジスタ変数
いくつかの変数が頻繁に使用される場合、実行効率を向上させるために、ローカル変数をCPUのレジスタに配置することを許可し、レジスタのアクセス速度はメモリのアクセス速度よりはるかに高いため、このようにして実行効率を高めることができ、このような変数をレジスタ変数と呼ぶ
外部変数
外部変数がファイルの先頭で定義されていない場合、その有効な範囲は定義からファイルの終了までに限られ、定義ポイントの前の関数は外部変数を参照できません.
ある考慮により、ポイントを定義する前の関数が外部変数を参照する必要がある場合は、参照する前にexternで変数を外部変数宣言する必要があります.
外部変数の役割ドメインをこの場所に拡張することを示します.この宣言があれば、「宣言」からこの外部変数を合法的に使用できます.たとえば、次のようにします.
関数を呼び出して、3つの整数の中の大きい者を求めます.
静的記憶方式とは、プログラムの実行中にシステムによって固定された記憶空間が割り当てられる方式である
動的記憶方式は、プログラムの実行中に必要に応じて動的に記憶空間を割り当てる方式である
C言語の各変数と関数には、データ型とデータの格納カテゴリの2つの属性があります.
ストレージカテゴリとは、静的および動的ストレージ、動的ストレージなどのデータがメモリに格納される方法を指します.
Cのストレージカテゴリは4種類あります.
自動(auto)、静的(static)、レジスタ(register)、外部(extern)
// auto static
#include<stdio.h>
int main()
{
int f(int); //
int a=2,i;
for(i=0;i<3;i++)
printf("%d
",f(a)); // f(a)
return 0;
}
fun f(int a)
{
auto int b=0; //
static c=3; //
b=b+1;
c=c+1;
return (a+b+c);
}
ローカル静的変数はどのような場合に必要ですか?関数の前回の呼び出しが終了したときの値を保持する必要があります.例えば、階乗nを求める必要があります.
// auto static
#include<stdio.h>
int main()
{
int f(int); //
int a=2,i;
for(i=0;i<3;i++)
printf("%d
",f(a)); // f(a)
return 0;
}
fun f(int a)
{
auto int b=0; //
static c=3; //
b=b+1;
c=c+1;
return (a+b+c);
}
レジスタ変数
いくつかの変数が頻繁に使用される場合、実行効率を向上させるために、ローカル変数をCPUのレジスタに配置することを許可し、レジスタのアクセス速度はメモリのアクセス速度よりはるかに高いため、このようにして実行効率を高めることができ、このような変数をレジスタ変数と呼ぶ
register int f; // f
外部変数
外部変数がファイルの先頭で定義されていない場合、その有効な範囲は定義からファイルの終了までに限られ、定義ポイントの前の関数は外部変数を参照できません.
ある考慮により、ポイントを定義する前の関数が外部変数を参照する必要がある場合は、参照する前にexternで変数を外部変数宣言する必要があります.
外部変数の役割ドメインをこの場所に拡張することを示します.この宣言があれば、「宣言」からこの外部変数を合法的に使用できます.たとえば、次のようにします.
関数を呼び出して、3つの整数の中の大きい者を求めます.
#include<stdio.h>
int main()
{
int max();
extern int A,B,C;
printf("Please enter three integer numbers");
scanf("%d%d%d",&A,&B,&C); // 3 A,B,C
printf("max is %d
",max());
return 0;
}
int A,B,C; // A,B,C
int max()
{
int m;
m=A>B?A:B;
if(C>m)m=C;
return (m); // m
}
// file1.c
#include<stdio.h>
int A;
int main()
{
int power(int);
int b=3,c,d,m;
printf("enter the number a and its power m:
");
scanf("%d,%d,",&A,&m);
c=A*b;
printf("%d*%d=%d
",A,b,c);
d=power(m);
printf("%d ** %d=%d
",A,m,d);
return 0;
}
// file2.c
extern A;
int power(int n)
{
int i,y=1;
for(i=1;i<=n;i++)
y*=A;
return (y);
}