データ型



概要


変数には型があり、これにより、データの性質、数値、範囲が表現される。この型を示すのに、int, unsigned const等が変数の前に指定される。
TOP


基本データ型


名称 備考
char 文字型
int 整数型
float 浮動小数点型
short 短長整数型
long 倍長整数型
double 倍制度実数型 long double(拡張精度実数型)
void 型なし
TOP


サイズ修飾子


long, short は、基本データのサイズを修飾し、標準以上 or 標準以下を指定する。
例)
型指定 内容
short int int型サイズ以下
long int int型サイズ以上
long double double型サイズ以上
  • 整数型の大小関係
short int ≦ int ≦ long int
  • 浮動小数点型の大小関係
float ≦ double ≦ long double
TOP


符号修飾子


signed, unsigned は、符号を修飾する。
例)
型指定 範囲
char -128~127
signed char -128~127
unsigned char 0~255
尚、明示的に、「signed」を使用することはあまりない。
TOP


型修飾子


const

const修飾子は、値の初期化はできるが、変更できない変数を指定する。
例)
const int i = 10;
// コンパイルエラーとなる。
i = 10;
// ポインタ変数pが保持しているアドレスにある変数を上書きできない。
const int *p;
// pが保持しているアドレスを変更できない
int *const p;
C++の場合、明確に型がわかるので、「#define」を使用するよりは「const」を利用する方がよい。
例)
#define MAX_SIZE (256)
const int MAX_SIZE = 256;

volatile

コンパイラの判断によって、最適化されることを禁止する。
最適化により、ある変数の値が変更される場合、プログラマが意図しない動作になってしまう可能性がある。
基本的に、最適化方法はソースコード上だけでは、見ても判断つかない。
TOP


記憶クラス指定子


auto(自動変数)

C言語では、デフォルトで「auto」が指定されているので、全く不要な指定子です。

static(静的変数)

静的変数は、常にメモリを一部占有し、大きく次の二つに分けられる。
  • 静的ローカル変数
静的ローカル変数は、宣言された関数が終了しても、メモリ上から消えることはない。
初期化されるタイミングはプログラムの開始時で、このとき、明示的に初期化しなくても、自動的に0に設定される。
また、この変数は宣言された関数内でのみ参照できる。
  • 静的グローバル変数
基本的な内容は、静的ローカル変数と同じ。但し、この変数は、同一ソースファイル内のみ参照できる。
  • 静的関数
この関数は、同一ソースファイル内のみ参照できる。

extern(外部変数)

外部変数は、関数外で定義され、どの関数からも参照できる。常にメモリの一部を占有し、その値を保持する。
  • 内部定義
変数定義が同じソースファイルにある場合。
  • 外部定義
変数定義が異なるソースファイルにある場合。

register(レジスタ変数)

基本的に、CPUにあるレジスタに変数の値を割り当てる。空いているレジスタがない場合、自動変数(auto)となる。
(レジスタはメモリよりも高速にアクセス可。)
使用頻度の高い変数に用いると処理速度の高速化が図れる。
但し、コンパイラの最適化により「register」を付けても必ずしも高速化になるとは限らないので、
レジスト変数も「auto」と同様あまり意味がない。尚、使用するには、以下の制限がある。
  • ポインタ変数にregisterは付けられない。
アドレスはメモリ上の番地であり、レジスタに番地はないので、そもそもアドレスが取得できない。
  • グローバル変数や静的変数に registerを付けることはできまない。
レジスタの個数には制限があり、これらの変数はプログラム実行中、常に存在しなくてはならないため、レジスタが埋まってしまうので。


typedef

既存のデータ型に、別の型名を与える。
<書式>
typedef [既存のデータ型] [別の型名];
例)型
typedef unsigned int size_t; // stddef.h
例)構造体
typedef struct
{
    int age;
    char name[80];
}HUMAN;

HUMAN h;
例)関数
typedef int (*PFUNC) (int, char*);

PFUNC func;
例)STL
typedef std::[[vector]]<int> VEC_INT;
TOP


enum型(列挙型)

enum 列挙型名 {列挙定数リスト} 変数リスト;

例1)
enum coltype {red, green, blue} color;
例2)
enum coltype {red, green, blue} color1, color2;
例3)
enum coltype {red, green, blue};
enum coltype color, work[10];
例4)
enum {red, green, blue} color;

上記いずれの場合も値は、
red = 0, green = 1, blue = 2
となる。
但し、下記のように宣言すると、

例5)
enum coltype {red, green = 5, blue} color;
red = 0, green = 5, blue = 6
となる。
TOP


参考

「#define」を使用するより、代わりに「const」「typedef」「enum」を使用した方がいい場合がある。
TOP


コメント

名前:
コメント:
TOP

最終更新:2009年05月23日 18:08
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。