ポインタのポインタ – その2

今日はアドレスを見るよ!

#include <stdio.h>

void showMessage(const char * const *pp)
{
	printf( "in func, *pp = %s\n", *pp );
	printf( "pp      = 0x%016lX\n", (unsigned long)pp );
	printf( "*pp     = 0x%016lX\n", (unsigned long)(*pp) );
}

int main(int argc, char *argv[])
{
	const char message[] = "hello.";
	const char *p = message;

	printf( "message = 0x%016lX\n", (unsigned long)message );
	printf( "&p      = 0x%016lX\n", (unsigned long)(&p) );
	showMessage( &p );
	return 0;
}

実行結果
message = 0x00007FFF5FBFF900
&p = 0x00007FFF5FBFF8F8
in func, *pp = hello.
pp = 0x00007FFF5FBFF8F8
*pp = 0x00007FFF5FBFF900

今日はポインタのポインタのアドレスを見るよ。
配列の先頭アドレスをポインタに入れてるよ。
そのポインタのアドレス、つまりポインタのポインタが&pだね。
そのアドレスを関数の引数に渡してるよ。
だから、&pとppが一致してるよ。
そして、*ppでmessageの先頭アドレスが取得できるよ。

ここまで理解出来れば、あとは習うより慣れろだから、
いっぱいコードを書いて覚えてね!

Leave a Comment