S.C. MAGI-SYSTEM 日記
Diary
2009年になって、実に3年ぶりに更新再開。

hns - 日記自動生成システム - Version 2.19.9

2005年03月17日(木) [n年日記]

[天気:雨ときどき曇り](研究室) 起床:11:00 就寝:27:00

#1 [Univ] 持ち帰り

データ等の整理は昨日までで終わったのですが、 物理的な持ち物(書類とか本とか自転車とか)を今日持って帰るために 先輩に車を出していただきました。
その帰り、船橋大神宮下近くにあるラーメン屋「一丁」に寄る。

2004年03月17日(水) [n年日記]

[天気:晴れ常に強風](家) 起床:9:30 就寝:25:00

#1 [Home] 春風

今日も風が強い。
いやだなぁ。

#2 [*BSD] C code

某日記に書かれていたのに気付いたのでちょっとコメントしてみる。
注意
私は独学で C を(主にソースコードを読んで)勉強した人間なので プログラミング言語 C としての 正しい用語 をよく知りません。(笑)
もしかしたら以下の用語が間違っているかもしれせんが、内容的には問題がない…はず。
char array[10];
memset(&array, 0x00, sizeof(array));
の動きと意味が分からないということですが、おそらく目的は char の配列 arrayの初期化 *1 だと思います。
ですが、仮に初期化を目的としていたとしてもこのコードには 重大な誤りがありますね。
それは memset() を呼んでいる第1引数が &array となっていることです。
第1行目で array を char の配列(sizeは10)として宣言しているので、 この array は単体で既に ポインタ を意味していることになります。
例えば array[0] が char としての実体を返す訳で、memset() の第1引数として ポインタを与える場合には &array ではなく array だけでいい *2 のです。
では &array は一体何を返すのでしょう?
ポインタのポインタということになるので何のこっちゃとなりますが、 試しに以下のコードを実行してみました。
#include <stdio.h>

int
main(int argc, char **argv)
{
	char array[10];

	printf("size %d\n", sizeof(array));
	printf("  %p\n", array);
	printf("& %p\n", &array);
	printf("&[0] %p\n", &array[0]);
	printf("&[1] %p\n", &array[1]);
	printf("&[9] %p\n", &array[9]);

	return 0;
}
結果は
Machintosh% cc -o hoge hoge.c
Machintosh% ./hoge
size 10
  0xbffffc00
& 0xbffffc00
&[0] 0xbffffc00
&[1] 0xbffffc01
&[9] 0xbffffc09
となりました。
これはコンパイラと動作環境に依存するかもしれませんが、 私の MacOS X + gcc では array も &array も同じということになりました。

…まてよ。
では次のコードはどうなるでしょうか。
#include <stdio.h>

int
main(int argc, char **argv)
{
	char array[10];
	char *ptr;

	printf("  %p\n", array);
	printf("& %p\n", &array);

	ptr = array;

	printf("ptr %p\n", ptr);
	printf("&ptr[0] %p\n", &ptr[0]);
	printf("&ptr %p\n", &ptr);

	return 0;
}
結果は
Machintosh% cc -o hoge hoge.c
Machintosh% ./hoge
  0xbffffbf0
& 0xbffffbf0
ptr 0xbffffbf0
&ptr[0] 0xbffffbf0
&ptr 0xbffffc00
となりました。
ここで ptr == &ptr[0] となるのは期待通り(というか当然)の動作なのですが、 ptr != &ptr という結果になります。
これがどうしてかはもうお分かりですよね。
この ptr という変数は始めから char のポインタ型として宣言されているので、 中にはポインタの値が格納されています。
ですから &ptr はその "ptrというポインタ値" が格納されているメモリアドレスを 示すポインタになるのです。

つまり、先程の array == &array となったのは array が単体のポインタではなく 配列型であったがために &array が array の先頭のポインタ (つまり &array[0]) を 指していたことによる偶然だった訳です。
C を書けない人に言わせると「ポインタ」が最大の難関だそうですが、 ポインタの書き方と、意味を理解してしまうとこれほど便利なものはないですね。
私が研究室でよく説明に用いている通称「ポインタ・サイクル」を示しておきます。
int value; /*1メモリ確保*/
&value (ポインタ) ← value (実体)

int *value; /*メモリ未確保*/
&value (ポインタ格納先のアドレス) ← value (ポインタ) → *value (実体)

int value[1]; /*添字分メモリ確保*/
&value (配列先頭のアドレス?) ← value (ポインタ) → value[0] (実体)
ですが、やはり配列で宣言した際にその先頭を意味したい場合に &value を使うのは よろしくない…というか正しくないと思いますね。
*1: Initialize。ようは 0 (Zero) で埋める作業。
*2: あるいは &array[0] かな? …あんまり意味ないけど。この場合 [] が & よりも強いので array[0] が評価されてから & が評価されます。つまり &(array[0]) 。

#3 [MacOSX] Camino Nightly Build

気紛れな Camino Nightly Build です。
ここのところ build がないのは、面倒だと思ってやっていないとか、勉強で忙しい *3 という訳ではなく、 tinderbox にもあるように
Tree FROZEN for 1.7beta - checkin requires drivers approval.
Mozilla 1.7beta に向けて CVS リポジトリが凍結されているために Camino 関連の修正も commit されない状況にあるからです。
たぶん数週間以内には Mozilla 1.7beta がリリースされると思いますが、 そろそろ 1.7 (trunk) も安定してきたんじゃないか、と思い Camino の trunk 版を build してみました。 [Camino_trunk-20040317.dmg.gz]
Camino 部分に関しては先日の 1.6 版と同じです。
今回違うのは Mozilla 部分。
ちなみに、試し build なので私はノーチェックです。(笑) *4
*3: 一応、そういうことにしておこう。(笑)
*4: 一応起動することぐらいは確認しましたが。

2003年03月17日(月) [n年日記]

[天気:雨のち曇り](家) 起床:7:30 就寝:26:00

#1 [Home] 光臨

ベルリン発の情報によりますと、
提出された 模試の結果 査察報告書に不備があったとのことで、今晩 恐怖の大王 国連査察団が再度 MAGI-SYSTEM イラクを訪れるようです。
そのため、現地では 勉強を妨げるモノ 大量破壊兵器や PowerBook G4 アッサムードなどの隠蔽工作が必死に続けられております。
査察は 国試 開戦が予想される 3/29 まで続く予定で、現状では 日記更新 株価の停滞などの影響が心配されます。

#2 [MacOSX] iTerm 0.6.5 (beta)

えー、MacOS Xにうつつを抜かしていられるのも今日までというかあと数時間となりました。
国試前の最後の更新とならなければいいが…

今日は iTerm の話です。
MacOS X付属のTerminal、 JTerminal 、そして iTerm と日本語の通るターミナルをいろいろ使ってきましたが、 結局これに落ち着きました。
現在正式にリリースされている 0.6.4b では、ターミナルの一番下のラインの表示がよく乱れたりしたのですが、 CVS から開発中のソースを落とし、自分で build した 0.6.5 ではその不具合も解消しています。
すばらしい。
一応、非公式 build を ここ に用意しました。
ちなみに、自分でソースから作りたい方は
% cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/iterm login
(空のままreturn)
% cvs -q -z 3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/iterm co iTerm
(ソースを取得)
% cd iTerm
% make
以上です。
ソースが公開されているものは自分で build した方がいろいろと幸せになれるかも。
まあ Mozilla のようにえらく時間がかかるものは避けた方がいいかもれないけど。

#3 [WWW] design change, again

前のSafari風メタリックな背景も嫌いではないのですが、 自分で見ていてちょっと見難かったので普通のAqua風なストライプに変えました。
これで字やハイパーリンクは見易くなったと思います。
メタリックなデザインは国試後にじっくりやろう。

#4 [Muzik] Lorie

Lorie "Pr\&egrave;s de toi":

Pr\&egrave;s de toi
なんか タワレコ だと Lolly になっているんだけど、何でだろう? *1
生首 ではなくで、 飲料水 の方の Evian のCMの曲 Dans nos r\&ecirc;ves (CD track 1)を歌っていた人です。
街角でアコギ片手に歌っている女性が非常に印象的なCMで、前からアーティスト名と曲名を調べていたのですが、最近ようやく分かったので Amazon.co.jp で購入しました。
この Lorie という方はフランスでは非常に有名でトップセラーのアーティストだそうですが、売れるのも分かります。
完全なポップです。曲もテンポもいい。すばらしい。
英語はポップであれば自然に耳に入ってくるのですが、ロシア語やフランス語であれば私には分かりません。
意味を理解できない方が曲として捉えることができるのか、素直に楽しむことができます。
もし機会があったら是非聴いてみることをお薦めします。

というかレビューになってないなぁ。

*1: Amazon.co.jp だと Lorie で検索できますね。


最近の日記
2019年06月24日
10年振り
2009年12月31日
定期アップデート
2009年04月03日
定期アップデート
2009年03月22日
定期アップデート
2009年01月26日
pomera
2009年01月23日
今日のBOT
2009年01月22日
BOT
2009年01月20日
Seagate HDD
PowerPCの備忘録
RSS feed
abuse
2009年01月19日
Windows 7 beta
2009年01月16日
perl-after-upgrade
2009年01月14日
アクセスカウンタ
2009年01月13日
ひとまず完了
2009年01月12日
7.1-RELEASE(適用)
2009年01月10日
hns 2.19.9
2009年01月09日
recursion no
以上、3 日分です。
先月 2019年09月 来月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project