プログラム組み立て係

C言語の事柄を主に書いてます

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ポインタ

ポインタは、メモリの中にあるデータのアドレス(場所)を示すことができます。

 int a = 12; // int型変数a
 int *p = &a; // intポインタ型の変数p

のように表記すると、変数pに変数aのアドレスを代入する意味になります。
アスタリスク(*)を付けるとポインタ型になります。
その式の右辺にあるアンド(&)を付けるとその変数のアドレスを入れます。
※この時のアスタリスクを間接演算子、アンドをアドレス演算子といいます。

ポインタは、中身の中身を見る(?)こともできますww
例:

 int a = 12; // int型変数a
 int *p = &a; // intポインタ型の変数p
 printf( "%d", *p ); // ポインタの参照元(アドレスの場所にあるデータ)の内容を表示(変数a内の内容を表示)

ポインタの利点は色々ありますが、そのうちの一つを言いますと、
関数の戻り値は一つしか返せませんが、
関数の引数にポインタを使うとそのまま代入できるようになるので、
その関数を利用している場所で、変数の値を変えられる数が増えます。

変数xと変数yをそれぞれ1加算する例を2つ



ポインタを使わない例
#include <stdio.h>

struct _tagXY{
 int x;
 int y;
};

struct _tagXY add_one( int nx, int ny )
{
 struct _tagXY my_xy;
 my_xy.x = nx + 1;
 my_xy.y = ny + 1;
 return my_xy;
}

int main(){
 int x = 24, y = 15;
 struct _tagXY my_xy;
 my_xy = add_one( x, y ); // 変数xと変数yのそれぞれ1加算し戻り値として返す
 x = my_xy.x; // わざわざ代入する行は作る必要は無いが、
 y = my_xy.y; // 最終的に変数x、yに加算した値を入れるということを前提としている
 printf( "変数x:%d", x );
 printf( "変数y:%d", y );
 return 0;
}



ポインタを使った例
#include <stdio.h>

void add_one( int* nx, int* ny ){ *nx+=1; *ny+=1; }
// *nx+=1、*ny+=1と表記することでnx、ny変数のアドレスの元にあるデータに+1加算代入する

int main(){
 int x = 24, y = 15;
 add_one( &x, &y ); // 変数xと変数yをそれぞれ1加算
 printf( "変数x:%d", x );
 printf( "変数y:%d", y );
 return 0;
}




のようにポインタを使うと簡潔になる場合がある。

ポインタを使わない方法のadd_one関数内のnx、ny変数を変えても
変数のスコープの関係のために他の関数の変数は、
違うメモリのアドレスにコピーされて使用されるため、値を変えても変わらない。
しかし、アドレス(場所)を教えることによって直接中身を替えることが可能になる。

Comment

コメントの投稿


管理者にだけ表示を許可する

Trackback

http://deltakirin.blog91.fc2.com/tb.php/27-77e86a6b

 | HOME | 

プロフィール

δキリン

Author:δキリン
パソコン関連のことについて
いろいろつづっていきたいと
思っています。

相互リンクは大歓迎ですよ!

もし良かったら、
ポチっとよろしくお願いします



※関係ないページ表示されたとき、
 下の検索フォームから検索してください


最新記事


カテゴリ

TOP (1)
C言語 (19)
HTML (2)
ハードウェア (5)
ソフトウェア (11)
美少女ゲーム (25)
音楽 (2)
アニメ (3)
不定期日記 (15)
本 (4)
雑記 (6)
未分類 (0)

月別アーカイブ


最新コメント


アクセスカウンター


検索フォーム


RSSリンクの表示


リンク

このブログをリンクに追加する

応援中

『airy[F]airy (エアリィフェアリィ)』応援中! 『ひだまりバスケット』応援中です! キスと魔王と紅茶 PULLTOP se・きらら バナー

ブロとも申請フォーム

この人とブロともになる


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。