読者です 読者をやめる 読者になる 読者になる

キンサクプログラマー

お金儲けと技術のメモ

お前らポインタ理解してんのかっつーの!

すいません。理解してないのは俺です。

 長らくC言語とお付き合いさせていただいていますが、いまだにポインタに悩まされています。さすがに、普通のポインタは瞬時に読み取れますが、ダブルポインタとかちょっと複雑になると考える時間が必要になります。こういうの一瞬で理解できる人って結構すごいよね。才能だよね。
 例えば、下の例だとgetAddressでnumberの先頭アドレスを返したいんですが、このコードだと・・・ダメですね(関数名がおかしいのと戻り値が適当なのは許してください)。コンパイルは通っちゃうから気づかずにテストして失敗します。「自動変数 *aにnumber代入しちゃったらaddress先輩にアドレス渡せないじゃん!」って、一瞬でわかった人は流石っす。

int number[] = {1,2,3,4};
static int getAddress(int *a)
{
     a = number;
     return 0;
}
static int address;
int main()
{
      int *address;
      getAddress(address);//addressにnumberの先頭アドレスがほしい
}

 C言語はシンプルで色々な言語の元にもなっているので好きですが、ポインタの使い方によって可読性が大きく変わってきます。組み込みだとアドレスを意識しなければならないのでポインタから逃げることはできませんが、要求を満たせる限りトリッキーなポインタアクセスはしないのが吉ですねぇ。