変数のアドレスを表示して確認するやつ
前回、変数のアドレスを表示して、変数のアドレス、および、配列のアドレスの変化と型の関係を確認するプログラムを作ってみた。
このプログラムの配列の型を、
に変更して、アドレスの変化がどうなるか確認しなさい。
coutで普通にchar型のアドレスを表示するとchar *型とみなされる。
これはどういう意味かなと考えてみると、ちょっと面白い。
#include <iostream> using namespace std; int main() { int a[5] = { 1, 3, 5, 7, 9}; int *p = nullptr; p=a; cout << a+0 << endl; cout << a+1 << endl; cout << a+2 << endl; cout << a+3 << endl; cout << a+4 << endl; }
これを実行すると
当然アドレスが表示されます。
#include <iostream> using namespace std; int main() { char a[5] = {'a','b','c','d','\0'}; char *p = nullptr; p = a; cout << a+0 << endl; cout << a+1 << endl; cout << a+2 << endl; cout << a+3 << endl; cout << a+4 << endl; }
じゃぁ、っていうので、これを実行して結果を表示してみます。
これはどういうことか考えてみよう!
んで、元に戻って、練習問題の解説します。
なので、char型の変数のアドレスをcoutで表示しようとすると、いろいろしんどい。。。
なので、(C++の太古の祖先である)C言語の(とてもありがたい)表示関数を呼び出す。
これはレジェンドクラスの召喚魔法であるため、使用にはかなりの知識と熟練を要する。
リンク:printfの解説ページ、一生懸命作ったから見てネ
#include <iostream> int main() { //アドレスは変数が格納されているメモリの住所 //通常の変数は、宣言した瞬間にメモリ領域が確保される //=アドレスが確定する int vInt = 1; short vShort = 2; float vFloat = 3.14; double vDouble = 2.15; char vChar = 'a'; printf("vInt 値:%4d| addr:%p\n", vInt, &vInt); printf("vShort 値:%4d| addr:%p\n", vShort, &vShort); printf("vFloat 値:%4.2f| addr:%p\n", vFloat, &vFloat); printf("vDouble 値:%4.2f| addr:%p\n", vDouble, &vDouble); printf("vChar 値:%4d| addr:%p\n", vChar, &vChar); }