 |
 |
|
auto
|
|
 |
auto は記憶クラス指定子です。関数内で変数を定義するときに、その定義文の冒頭にこの auto 記憶クラス指定子をつけます。
auto int localInt;
この auto 記憶クラス指定子をつけることによって、その変数は関数が呼び出された時に自動でメモリー上に確保され、関数が終了る時に自動でメモリ上から解放されます。このように自動でメモリの確保と解放を行いますので、 auto 指定された変数のことを 自動変数 と呼びます。
自動変数(auto指定された変数)はあくまでも関数内のローカル変数のみで定義できます。ほとんどのローカル変数は自動変数になっていたほうが都合が良いので、通常は記憶クラス指定子がなにも付いていないローカル変数は auto 指定されているものと見なされるようになっています。
int localInt;
上記のように定義されたローカル変数も 自動変数 と見なされます。
|
 |
|
char
|
|
 |
char はデータ型です。メモリー上に1バイトの領域を確保します。表現できる数値の範囲は、-(マイナス)128〜(プラス)127です。最高値の127に1を足すと、最低値の-(マイナス)128に戻ります。そして1を足すごとに、-127、-126、-125となり、やがて0になり、その後は、1、2、3と数値が増えていきます。
char は character「文字」の略で、C言語の文字列は、この char 型の配列として管理します。しかし Objective-C言語と Cocoa によるプログラミングでは、このような char型配列としての文字列を扱うことはまずありません。Objective-C と Cocoa では NSString というクラスを用いて文字列を管理いたします。
|
 |
|
double
|
|
 |
double はデータ型です。倍精度浮動少数点数型(ばいせいどふどうしょうすうてんすうがた)とも呼ばれています。double は8バイトのメモリを確保します。そして、
およそ10の-307乗〜10の308乗 有効15桁 の実数を表すことができます。
なおこの有効桁数とは、整数部分と小数点以下を合せた桁数です。そして小数点も一桁として数えられます。
int main (int argc, const char * argv[]) {
double doubleValue = 123456789.123456789 ;
NSLog(@"\n doubleValue is %f", doubleValue);
}
|
|
|
上記の結果は、
doubleValue is 123456789.123457
となりました。
double値では、小数点も一桁と考えれますので、それも含めて15桁まで正確な数値が表示されてます。そして有効範囲を超えた16桁目から数値の丸めがおこっています。
|
 |
|
else
|
|
 |
else は、単独で使われることはなく、if 文と一緒に使われます。詳しくは、if をご覧になってください。
なお、「else」という英単語には、「他に、それ以外に、さもなければ」という意味があります。
|
 |
|
float
|
|
 |
float はデータ型です。浮動小数点数型(ふどうしょうすうてんすうがた)とも呼ばれています。float は4バイトのメモリを確保します。そして、
およそ10の-37乗〜10の38乗 有効6桁 の実数を表す事ができます。
なおこの有効桁数とは、整数部分と小数点以下を合せた桁数です。そして小数点も一桁として数えられます。
int main (int argc, const char * argv[]) {
float floatValue = 123456789.123456789 ;
NSLog(@"\n floatValue is %f", floatValue);
}
|
|
|
上記の結果は、
floatValue is 123456792.000000
となりました。
float型データの有効桁数の6桁を超えていますが8桁目で数値の丸め(四捨五入)がおこなれています。
|
 |
|
if
|
|
 |
if 文は制御文のひとつです。if (条件式) と記述して、条件式が真 (true もしくは YES) か、あるいは 偽 (false もしくは NO) かを判断してその後の処理の方向をを2つに分岐 (ぶんき「分かれること」) します。このような形を条件分岐 (じょうけんぶんき) と呼び、プログラミングでは重要な制御文のひとつです。なお、普通は文(式)の終わりには「 ; 」(セミコロン) を記述することになっていますが、このように条件式の「( )」の中や、関数の引数の「( )」の中では、「 ; 」(セミコロン) をつけてはいけません。
(ただし、for文の中でのみ「( )」の中で「 ; 」(セミコロン)を使います。ご注意してください。)
if 文は大きく分けて次の3種類にわかれます。
パターン 1
int main (int argc, const char * argv[]) {
BOOL boolValue = YES ;
if (boolValue) {
NSLog(@"\n boolValue is YES.") ;
}
return 0 ;
}
|
|
|
実行結果は、
boolValue is YES.
となります。2行目を、「BOOL boolValue = NO ;」 とすると何も起こらずにプログラムは終了します。
パターン 2
int main (int argc, const char * argv[]) {
BOOL boolValue = NO ;
if (boolValue) {
NSLog(@"\n boolValue is YES.") ;
} else {
NSLog(@"\n boolValue is NO.") ;
}
return 0 ;
}
|
|
|
実行結果は、
boolValue is NO.
となります。この if 文では、if (条件式) に該当しなかった場合の処理を、else { } に記述しています。
パターン 3
int main (int argc, const char * argv[]) {
int intValue = 3 ;
if (intValue == 1) {
NSLog(@"\n intValue is 1.") ;
} else if (intValue == 2) {
NSLog(@"\n intValue is 2.") ;
} else if (intValue == 3) {
NSLog(@"\n intValue is 3.") ;
} else if (intValue == 4) {
NSLog(@"\n intValue is 4.") ;
} else {
NSLog(@"\n intValue is not 1 to 4.") ;
return 0 ;
}
|
|
|
実行結果は、
intValue is 3.
となります。if 文は、基本的には2方向への分岐ですが、else if を用いることによって多方向への分岐が可能になります。
なお、最後の else { } は省略することができます。
また、if 文は if ( 条件式 ) { } の「{ }」の中にさらに if 文を記述することができます。
|
 |
|
int
|
|
 |
int はデータ型です。int は integer「整数」の略で文字通り整数値を表すデータ型です。
int 型は現在4バイト32ビットで、-2147483648〜2147483647 (約マイナス20億からプラス20億) の整数値を表すことができます。ここで気を付けなければいけないのは、最高値2147483647に1つ足した次の数値は最低値の-2147483648になるということです。そして-2147483648の次は-2147483647というようにだんだんとマイナス値が減っていき、やがて0になり、そこから1、2、3と上がっていくというサイクルになっています。
|
 |
|
long
|
|
 |
long はデータ型ですが、単独で使われることはなく、他のデータ型を修飾する形で使われます。現在使われる可能性のあるものは double型か、移行が進んでいる64ビットコンピューターに対応をとるために同じ long を修飾する long型だけだと思われます。
long double longDoubleValue ;
現在 double型はすでに8バイトのメモリー領域を確保しますが、long修飾をつけることで、さらにそれ以上のメモリーを確保するように変更できる余地が残されています。しかし実際にそれを使う可能性は、まず無いと思って頂いて良いと思います。
long int longIntValue ;
現在ではまったく無意味な宣言です。まだ、ほとんどのコンピューターが2バイト(16ビット)だった頃の int 型は2バイトのメモリー領域しか確保しませんでした。そういう int 型を long で修飾すれば4バイトのメモリー領域を確保する整数値型を作ることができたのですが、現在では32ビットコンピューターが主流になっていて、int 値自体が4バイト(32ビット)のメモリー領域を確保するようになっています。現在では、仮に上記のように宣言してみても確保されるメモリー領域が4バイトより増える事はありません。
long long int longLongIntValue ;
このように long 型2つで修飾された int 値は、8バイト(64ビット)のメモリー領域を確保することになるそうです。
「なるそうです」とあいまいな言い方になっているのは、私はまだ64ビット対応のプログラミングをしたことがないからです。なお、16ビットから32ビットへの移行のときのように int 値の幅じたいを広げる、という措置はとられないみたいです。 |
 |
|
return
|
|
 |
return文は、現在実行している関数を終了し、呼び出し元の関数に戻ります。その際に戻り値 (返り値) のある関数の場合は、その戻り値を返してからその関数を終了します。なお関数は、最後の
「 } 」に出会うことで終了することに決まっていますので、 return 文での終了は、「強制終了」とも言われます。
return 式 ;
返り値は、「式」の部分にリテラル、変数、定数などで記述されます。また式なので、 A + B や 1 + 2 などと記述することもできます。返り値を返さない場合は、
return ;
と、記述します。
return の働きをまとめると、
1. 強制的に関数を終了させる。
2. その関数の返り値を返す。
という2つの働きを持っていることになります。しかし返り値だけを返して関数は終了しないということはできません。
なおreturn 文は、関数の中にいくつでも記述することができます。またmain関数の中で使われた場合は、そのプログラムを終了するという意味になります。main関数の場合は、プログラムの実行で最初に呼び出される関数です。そのmain関数の呼び出し元に戻るということは、システム( OS ) に戻るということになり、プログラムを終了するという意味になります。
|
 |
|
short
|
|
 |
short はデータ型ですが、単独で使われることはなく、他のデータ型を修飾する形で使われます。現在使われる可能性のあるのはint型を修飾する形だけと思われます。
short int shortIntValue ;
このように int を short で修飾すると、確保されるメモリーは本来の4バイトから2バイトへと変更され、表現できる数値の範囲も -(マイナス)32768〜(プラス)32767 となります。最高値の32767に1を足した次の数値は、最低値の-(マイナス)32768に戻ります。さらに1を足せば、マイナスを一つ減らして、-(マイナス)32767になり、さらに足していけば、やがて 0 になり、その次は、1、2、3と数値が上がっていくというサイクルは通常のint値と同じです。
|
 |
|
signed
|
|
 |
signed はデータ型ですが、単独で使われるものではなく整数値を表すデータ型を修飾します。
signed int signedIntValue ;
このように宣言すると、その int 値は、-(マイナス)値とプラス値を持つようになります。つまり普通に宣言した整数値変数とまったく同じということです。したがって signed 修飾を使うことは少ないです。 |
 |
|
sizeof
|
|
 |
sizeof 演算子は、データ型、変数、配列、構造体、共用体などが確保しているメモリサイズ (バイト数) を調べます。
sizeof 式 ;
式には、変数、配列、構造体、共用体などが指定できます。
sizeof (データ型) ;
データ型のサイズを直接調べる場合はデータ型名を ( ) で囲みます。
1. 変数のサイズを調べる場合
int main (int argc, const char * argv[]) {
BOOL boolValue = YES ;
char charValue = 'A' ;
short int shortInt = 32000 ;
int intValue = 2100000000 ;
float floatVal = 123.456 ;
double doubleVal = 123456.123456 ;
NSLog(@"\n boolValue is %d", sizeof boolValue) ;
NSLog(@"\n charValue is %d", sizeof charValue) ;
NSLog(@"\n shortInt is %d", sizeof shortInt) ;
NSLog(@"\n intValue is %d", sizeof intValue) ;
NSLog(@"\n floatVal is %d", sizeof floatVal) ;
NSLog(@"\n doubleVal is %d", sizeof double) ;
return 0 ;
}
|
|
|
実行結果は、
boolValue is 1
charValue is 1
shortInt is 2
intValue is 4
floatVal is 4
doubleVal is 8
2. データ型のサイズを直接調べる場合
int main (int argc, const char * argv[]) {
NSLog(@"\n BOOL is %d byte.", sizeof(BOOL)) ;
NSLog(@"\n char is %d byte.", sizeof(char)) ;
NSLog(@"\n short int is %d bytes.", sizeof(short int)) ;
NSLog(@"\n int is %d bytes.", sizeof(int)) ;
NSLog(@"\n float is %d bytes.", sizeof(float)) ;
NSLog(@"\n double is %d bytes.", sizeof(double)) ;
return 0 ;
}
|
|
|
実行結果は、
BOOL is 1 byte.
char is 1 byte.
short int is 2 bytes.
int is 4 bytes.
float is 4 bytes.
double is 8 bytes.
以上です。
|
 |
|
static
|
|
 |
static は記憶クラス指定子です。ローカル変数は通常、自動変数です。関数の始まりで確保され、関数の終了で破棄されます。これはメモリの節約という意味で有効です。また関数内だけで有効な変数なので関数が違えば同じ名前のローカル変数を定義できます。しかし自動変数は関数が終了するときに破棄されてしまいますので値の保持を続けることができません。
一方、グローバル変数は、プログラム開始時に確保され、プログラム終了時に破棄されます。つまりプログラムの起動中はずっと値を保持します。しかしグローバル変数は関数内で同じ名前のローカル変数がある場合、その関数内では、そのローカル変数が優先され、名前が同じグローバル変数は使えなくなります。
「ローカル変数の static 指定子」
static int localInt ;
ローカル変数に上記のように static 指定子を付けて宣言すると、その関数内だけで使えて、しかも関数の終了後もメモリから破棄されずに値の保持を続けるローカル変数を確保することができます。このように static 指定されたローカル変数のことを静的変数と呼びます。関数の2度目以降の開始時には、static 指定子を付けた静的変数は新たに確保されることはありません。auto 指定されている自動変数は、関数の開始ごとに新たに変数を確保しています。
「グローバル変数の static 指定子」
static int globalInt ;
グローバル変数に上記のように static 指定子をつけて宣言すると、そのグローバル変数は、それが定義されているファイル内だけで有効となります。他のファイル内の関数からは一切使えません。
ここで言う「ファイル」とは拡張子「.m」が付いた1つ1つのファイルの事を指します。通常、プログラミングでは、複数のファイルが存在しています。
|
 |
|
typedef
|
|
 |
typedef はキーワードです。以下のようにして既存のデータ型に新しいデータ型名を付けることができます。このようにすることによって、変数の宣言を見た時に、そのデータが何を表しているのかが直感的に分かりやすくなります。また既存のデータ型名も平行して問題なく使えます。
typedef char BOOL ;
これで、char 型の変数は、
char charValue ;
BOOL boolValue ;
と、どちらの宣言文も使えるようになります。
|
 |
|
unsigned
|
|
 |
unsigned はデータ型ですが、単独で使われるものではなく整数値を表すデータ型を修飾します。
unsigned char unsignedChar ;
unsigned short int unsignedShortInt ;
unsigned int unsignedInt ;
このように宣言すると、その整数型変数の値は+(プラス)-(マイナス)という符号を持たなくなります。つまり、
char の場合は-128〜127を表していたのが、0〜255を表すようになり、
short int の場合は-32768〜32767を表していたのが、0〜65535を表すようになり、
int の場合は-2147483648〜2147483647を表していたのが、0〜4294967295を表すようになります。
|
 |
|
void
|
|
 |
voidは一つの型ということになります。voidの意味は、「空な, 空虚な, (家・土地などが)あいた, 欠員の, …がない, 欠けた」となっています(エクシード英和辞典より)。
返り値(戻り値)がない関数、あるいは引数を持たない関数の場合、その「返り値(戻り値)がないこと」や「引数を持たないこと」を明示的に定義する場合に用います。
void funcA ( void ) {
式1 ;
式2 ;
式3 ;
}
|
|
|