C言語ポインタの高度な操作

4319 ワード

C言語ポインタの高度な操作


ししん

ししん


前回のブログではC言語ポインタの最も基本的な操作を紹介しましたが、このブログではC言語ポインタのいくつかの騒々しい操作を紹介します.

ポインタを指すポインタ


この名前は一見言いにくいが、もう一度聞くともっと言いにくい.定義を参照:
type **ptr;
はポインタより1つだけ多い*号で、大きな変化はありません.次に使用を見てみましょう.
#include 
void main()
{
    int var = 10;
    int *ptr;
    int **pptr;
    
    ptr = &var;

    pptr = &ptr;

    printf("ptr %p
"
,ptr); printf("*ptr %d
"
,*ptr); printf("pptr %p
"
,pptr); printf("*pptr %p
"
,*pptr); printf("**pptr %d
"
,**pptr); }

このとき&*の役割を考えれば理解できると思います
  • &:アドレス
  • を取る
  • *:アドレスから値をとる
  • C言語ポインタは であることはよく知られていますが、変数に格納されている値はアドレスにすぎません.では、メモリ領域に必ず1つの位置を占めなければなりません.空で生成されるはずがないので、ポインタには があります.
    したがって、上記のコードでは、pptrは、ポインタ変数ptr を表す.*pptrは、ポインタptr 、すなわちvar を表すので、**pptrvarの値を表す.
    コードの実行結果は次のとおりです.
    ptr 0x7ffe3aee9994
    *ptr 10
    
    pptr 0x7ffe3aee9998
    *pptr 0x7ffe3aee9994
    **pptr 10