ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Cの配列は分かる人に、ポインタを教える(その2)

2007-10-16 19:11:59 | Weblog

 その1のつづき。ポインタによるアクセス




■配列のように、添字を使ってアクセスする

 ポインタに文字列をコピーしたあと、その何番目かの文字を利用したい場合は、どうしたらよいのでしょうか?

 1つの方法は、配列のように、添字を使います。
 こんなかんじ

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main()
{
	char *str1;

	str1 = (char *)malloc(20);
	strcpy(str1,"Hello");

	//	配列のようにアクセス
	printf("%c ¥n",str1[1]);

	free(str1);
}

(上記 ¥ < > は、本当は半角)

上記の例では、str1[1]というように、ポインタで取った領域を配列のようにアクセスしています。




■ポインタによるアクセス

 もうひとつは、*を付けてアクセスする方法です。
 *を付けると、その領域の中身を示します。

 なので*str1は、str1の文字列(領域)の、先頭の文字を現します。
 そのとなりの文字が見たい場合、str1+1で、2番目の文字のところに行きますので、*(str1+1)で、隣の文字の中身が見れます。
 str++のように足し算も出来ます。

こんなかんじです。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main()
{
	char *str1;

	str1 = (char *)malloc(20);
	strcpy(str1,"Hello");

	//	ポインタでアクセス
	printf("%c ¥n",*str1);

	//	となりを、ポインタでアクセス
	printf("%c ¥n",*(str1+1));

	//	++で足せる
	printf("%c ¥n",*(str1++));

	free(str1);
}

(上記 ¥ < > は、本当は半角)




■*(str1++)と(*str1)++は違う

 上記で、str1に"Hello"とセットしたとき、

*(str1++)と(*str1)++は違う意味になるので、注意です。

*(str1++)というのは、まずはじめにstr1を++(インクリメント、1足す)して、
その後、*つまり、中身を表示しなさいという意味です。
上記の例だと、Hの次の'e'という文字になります。

一方、(*str1)++は、まずはじめに、中身を求め(上記の例だと'H')、
その値に1を足しなさいということになるので、'H'の次の'I'が答えと
いうことになります。

 このように、*(str1++)と(*str1)++は違う意味になるので、注意です。




 次に、配列とポインタの類似性について触れたいと思います。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

わかりやすい仕様記述および合意方法の共同検討成果の第一弾「発注者ビューガイドライン(画面編)」

2007-10-16 14:05:44 | 開発ネタ

 今日、あることで、構造計画のYAHOOニュースを見ていたら、こんなもの発見・・

お客様にわかりやすい仕様記述および合意方法の共同検討成果の第一弾「発注者ビューガイドライン(画面編)」を公開開始~検討会に新たに3社参加し体制も強化~
http://profile.yahoo.co.jp/press_release/?s=4748&id=4748102534


これって、日経ソリューションビジネス2007年10月15日号(「儲かるSaaSはこう作れ!」って表紙に書いてある号)の43ページにある、富士通、NEC,日立、構造計画、東芝ソリューションが作ったガイドライン、「発注者ビューガイドライン(画面編)」のことですよね。

 見てみましょう。。。
発注者ビューガイドライン(ダウンロード可能)
http://www.nttdata.co.jp/cview/guideline.html

の一番下で同意して。。。

う(>_<!)
ダウンロードたいへん・・・(>_<!!)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする