狐の王国


2007年06月15日(金) [過去の今日]

#1 ポインタとリファレンス

先日 Cのポインタがわからん というのを、まあ半分愚痴なのだが何気に書いてみたところ、意外にも反応がもらえた。 参照(reference)とポインタの間の大きい(かも知れない)溝 という記事で、

参照     → increment/decrementのような操作ができない
ポインタ → increment/decrementのような操作ができる

との由。

あれ、そうだっけ、と思ってやってみると、

$ perl -le 'sub hoge{(local(*i)) = @_; $i++;} my $i = 10; hoge(\$i);print $i;'
11

……できてるな。

ちょっと検索してみたら、 Q.Cにはreference(参照)が無いと聞きましたが本当でしょうか? referenceが無ければリンクリストすら表現できないと思うのですが? という質問と回答を見つけた。確かにreferenceとpointerの違いとして、

Cのポインターは+, -, ++, --(加算、減算、インクリメント、デクリメント)などの算術演算が可能

と、述べられてるな。

つまりあれか、俺がPerlのreferenceのつもりで言ってたのが、前の記事の某友人や反応くださった方にはJavaのreferenceとして認識されてたわけか。そりゃー違うわけだ。C++にも参照があるみたいだからそっちかもしれんな。

しかし、Perlの参照(reference)ってこう見るとCのポインタとほとんど変わらないように見えるなあ。配列型も関数型もいけるし、メモリアドレスというわけじゃないってのが違うくらいか。

さっきのワンライナーをCでやると、

#include <stdio.h>

int hoge(int *i)
{
	(*i)++;
}

int main()
{
	int i;

	i = 10;
	hoge(&i);
	printf("%d\n", i);
}

こんな感じか。 渡し方と受け取り方が違うだけに見えるなあ。

というわけで紛らわしい言い方してごめんよ >某友人。

紛らわしい書き方してごめんなさい & 反応ありがとうございました。 >雑記帖リターンズの方

(@040)

この記事のURI

最近の記事

以上、1 日分

タイトル一覧


カテゴリ分類
Powered by hns-2.19.8, HyperNikkiSystem Project

過去にこの日記が置いてあったcgi.misao.gr.jpは廃止されました。それによって記事へのURIが変わってしまっています。cgi.misao.gr.jpをwww.misao.gr.jpと置き換えるだけで同じ記事にアクセスできるはずです。

Sugano "狐志庵" Yoshihisa(E) @ 美紗緒ネットワーク <koshian@misao.gr.jp>
日記管理ページ