🚀

[超初心者向け!]B+tree 実装をポインタからわかりやすく解説 [C++ポインタ編]

2024/06/25に公開

はじめに

B+tree 実装をコーディング初心者でも分かるように解説してみました

この記事の対象者

・B+tree の理論は分かったけど、コードに落とし込めない人
・ポインタがよくわからない人

一緒に実装しましょう!

目次

  1. ポインタとは
  2. Node の構造体
  3. コード解説
    コードの書き方はあくまで一例です
    絶対的な解ではありませんので、参考にしていただければ幸いです

1. ポインタ

抑えるべきは3つ

その1. 値->アドレス
その2. アドレスを入れる型
その3. アドレス->値

その1. 値->アドレス

int a = 3
と定義すると、int 型に3が代入されます
この時のメモリのアドレス (メモリ内のどこにこの値が入っているか) は '&' を使うことによって表すことができます

pointer.cpp
#include <iostream>
using namespace std;
int main(void)
{
   // Your code here!
   int a = 3;
   cout << a << endl;  // 3
   cout << &a << endl; // 0x7ffdaa8f6d44
}

関数 a はメモリ内のアドレス(0x7ffdaa8f6d44) に入っています

その2. アドレスを入れる型

関数名の前に '*' をつけることによって、アドレスだけを入れる型を作成することができるようになります

'int *' は int型のアドレスを入れることができます

pointer.cpp
#include <iostream>
using namespace std;
int main(void){
   // Your code here!
   int a=3;
   cout<<a<<endl; //3
   cout<<&a<<endl; //0x7ffdaa8f6d44
  
   int *a_no_pointer=&a;
   cout<<a_no_pointer<<endl;//0x7ffff1ee1a94
}


int *a_no_pointerは int a のアドレスを代入しているということです

その3. アドレス->値

その2の上で、*をつけると、そのアドレスに入っている値を出力することができます

pointer.cpp
#include <iostream>
using namespace std;
int main(void){
   // Your code here!
   int a=3;
   cout<<a<<endl; //3
   cout<<&a<<endl; //0x7ffdaa8f6d44
  
   int *a_no_pointer=&a;
   cout<<a_no_pointer<<endl;//0x7ffff1ee1a94
   cout<<*a_no_pointer<<endl;//3
}

*a_no_pointer には &a が代入されています
そして、a には3が代入されているため3が出力されます

このように、'*' は二つの意味で用いられます
ここがややこしくポインタが難しいとされる理由かと思います

最後まで読んでくださりありがとうございました!
次は Node 構造体編です!
https://zenn.dev/risaaa/articles/666d71183d45c5

Discussion