2012年5月13日日曜日

ポインタについて

ポインタについて個人的にまとめてみます。

ポインタとは

ほかの変数やメモリ領域のアドレスを示す変数のことで、間接的にデータにアクセスするためのものです。

ポインタの宣言

ポインタの宣言方法は変数名の前に *(アスタリスク)をつけて宣言します。
int *a;
or
int* a;

※ Objective-Cではインスタンス変数もポインタの宣言方法と同じく変数名の前に *(アスタリスク)をつけます。

ポインタのサイズ

ポインタのサイズは、32ビットOSなら4バイト、64バイトOSなら8バイトになります。

ポインタ変数の初期化

ほかの変数のアドレスを知るには

int *a = &b;

変数aにbのアドレスが代入されます。

ポインタが示すアドレスの中身を得るには

int c = *a;

int型cにint型aの指すアドレスの中身が入ります。

ポインタと文字列

C言語の文字列はいわば配列で、1文字を表すchar型のデータの配列です。例えば、
char *text = @"Hello!";
と、
char text[] = @"Hello!";
はほぼ同じです。

違いもあり、配列で宣言した方は文字列の変更を行うことができます。
char text[5] = @"?";

と記述すると文字列は "Hello?" になります。

ポインタと構造体

複数の変数をまとめてひとつの型として使える構造体の書き方は以下のようになります。

struct 構造体名{
メンバ変数;
メンバ変数;
:
:
}

例として以下のような構造体があるとします。
struct kouzoutai{
  int a;
  float b;
  char c;
}

構造体を使うには

構造体は型であるため実体(インスタンス)を生成して以下のように行います。
struct kouzoutai k;

こうすることで構造体kouzoutai型の"k"が生成されます。この"k"でアクセスすることができるようになります。

メンバ変数にアクセスする

アクセスは「.」で繋いで記述します。
k.a = 10;
k.b = 5.5;
k.c = "構造体ってなに?";

インスタンスを配列として宣言

構造体へのアクセスは配列を用いても行うことができます。

まずはインスタンスを配列として宣言します。
struct kouzoutai arr[10];

配列として宣言したインスタンスからのアクセス方法は以下のようになります。
arr[3].a = 10;

構造体の配列はポインタを使うと便利

宣言時にポインタ指定し、配列を代入します。
struct kouzoutai *pointer;
pointer = arr; 

構造体へポインタを通してアクセスするには「->」を用います。
pointer->a = 10;
pointer->b = 5.5;
pointer->c = "構造体ってなに?";

参考書籍

Objective-C プログラマーズバイブル

0 件のコメント:

コメントを投稿