データ型/定数/変数



■基本データ型
データ型 代表的なデータ サイズ 範囲
char 符号付き文字 1 bytes -128 〜127
unsigned char 符号なし文字 1 bytes 0〜255
short int(short) 符号付整数 2 bytes -32768〜32767
unsigned short int(unsigned short) 符号なし整数 2 bytes 0〜65535
int/long int(long) 符号付き整数 4 bytes -2147483648〜2147483647
unsigned int/unsigned long int(unsigned long) 符号なし整数 4 bytes 0〜4294967296
float 単精度実数 4 bytes 3.4E +/- 38 (7 桁)
double 倍精度実数 8 bytes 1.7E +/- 308 (15 桁)

※int型はシステムに依存します。また、()は別名を表しています。


■変数の宣言
<書式1>
データ型 変数名;
<書式2>
データ型 変数名,変数名・・・;

<変数宣言&代入の例>
#include <stdio.h>
void main(void)
{
 char  a;     //char型の変数aを宣言
 int   c,d,e;   //int型の変数c,d,eを宣言
 double z;     //double型の変数zを宣言
 int   buf=100; //int型の変数bufを100で初期化

 a='a';      //char型の変数aに文字[a]を代入 
 c=100;      //int型の変数cに100を代入
 d=30;       //int型の変数dに30を代入
 e=10;       //int型の変数eに10を代入
 z=3.1415     //ouble型の変数zに3.1415を代入
}

■文字定数と文字列定数
文字定数 'b'
'3'
文字定数b
文字定数3
文字の長さは1になる。
(例)
char x = 'A';
文字列 "ABC"
"A"
""
文字列ABC
文字列A
空文字
文字の長さは文字数+1になる。
(例)
"A"='A'+'\0'
""='\0'
※文字列の場合はNULL文字が最後尾に格納される

■キャスト演算子
(型) 式

※double型からint型への変換は少数部が切り捨てられます。(例)1.34->1

<型変換のサンプル>
#include <stdio.h>
void main(void)
{
 int a=10,b=4;
 double c;
 //int型からdouble型へ変換
 c=(double)a/b;
 printf("%f",c);
 getchar();
}

※10/4の結果は2.500000になります。ちなみにキャストを行わないと2.000000になります。

■構造体
<書式1>
struct タグ名
{
 メンバ名の宣言;
   ・
   ・
   ・ 
}
<書式2>
struct タグ名
{
 メンバ名の宣言;
   ・
   ・
   ・ 
} 変数名,変数名・・・

※書式2は最初からメモリを確保(変数宣言)するものです。

<構造体のサンプル>

#include <stdio.h>

void _scrennview(struct dog *dogs);

struct dog
{
 int age;
 int weight;
 char name[20];
 int dogid;
};

void main(void)
{
 //構造体宣言&初期化
 struct dog dogs={10,20,"忠犬ハチ公",4};

 printf("構造体のメンバ参照(ノーマル編)--->\n");

 //構造体のメンバの参照は「.」
 printf("年齢:%d\n",dogs.age);
 printf("体重:%d\n",dogs.weight);
 printf("名前:%s\n",dogs.name);
 printf("ID :%d\n\n",dogs.dogid);
 
 printf("構造体のメンバ参照(ポインタ編)--->\n");

 //構造体へのポインタのメンバ参照は「->」
 _scrennview(&dogs);

 getchar();
}

void _scrennview(struct dog *dogs)
{
 printf("年齢:%d\n",dogs->age);
 printf("体重:%d\n",dogs->weight);
 printf("名前:%s\n",dogs->name);
 printf("ID :%d\n",dogs->dogid);
}

■任意のデータ型定義
typedef 既にある型 新しい名前;


<任意のデータ型定義のサンプル>
#include <stdio.h>

typedef int  integer; //integerをint型に定義
typedef char _string; //bytestringをchar型に定義

void main(void)
{
 integer a=10;
 _string b[7]="Hellow";

 printf("%d\n",a);
 printf("%s\n",b);
 getchar();
}

■共有体
union タグ名
{
 メンバ名の宣言;
   ・
   ・
   ・ 
}

※基本的に構造体と同じ宣言方法だが共用体変数に収容できるメンバは一度に 1 つなので注意。

<共有体のサンプル>
#include <stdio.h>

union _data
{
 char a;
 short b;
 int c;
};

void main(void)
{
 union _data x;
 x.c=0x11223344;
 printf("char =%x\n",x.a);
 printf("short =%x\n",x.b);
 printf("int =%x\n",x.c);
 getchar();
}

※結果char=44 short=3344 int=11223344になる

■列挙型
<書式1>
enum タグ名 {名前の宣言};

<書式2>
enum タグ名 {名前の宣言} 変数名,変数名・・・;

<列挙型のサンプル>
#include <stdio.h>

enum animal {dog,cat,lion};
//値を指定することも可能
//enum animal {dog=10,cat=20,lion=30,cow=40,rabit=50};


void main(void)
{
 enum animal animals;
 int buf;
 printf("動物の番号を選びなさい。\n");
 printf("また、数値以外は入力しないで下さい。\n");
 printf("0: 犬 1:猫 2:ライオン 9:終了\n");

 while(1)
 {

  scanf("%d",&buf);
  if ((buf==9)) break;
  animals =(animal)buf;
  switch(animals)
  {
   case dog : printf("ワンワン\n"); break;
   case cat : printf("ニャンニャン\n"); break;
   case lion: printf("ガオー\n"); break;
   default : printf("番号が不正\n"); break;
  }
 }
}




Cの基礎のページへ


ホーム PV ランキング