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