最終更新:2017-01-16 (月) 17:43:07 (2657d)
ポインタ
Top / ポインタ
用語
ポインタ型?
- アドレスを記憶する変数の型
ポインタ値?
- アドレス
ポインタ変数
演算子
例
int *p;//int型へのポインタ int* p;//上と同じ char *s;//char型へのポインタ char* s;//上と同じ int i; int *p; p=&i; *p = 1; p[0]=1; int a[3];//aは配列の先頭ポインタ int *p; p=a; p=&(a[0]);//p=aと同じ *p=1;//a[0]=1 p[1]=2; *(p+2)=3;//a[2]=3;
C言語のアドレス演算
- アドレス+整数
アドレス + そのオブジェクトの占有するバイト数 x 整数値
int t[]={1,2,3,4,5};/* tは配列の先頭アドレス */ /* tはsizeof演算子や&演算子以外のオペランドの時は配列が置かれた記憶域の先頭要素を指すアドレスになる (左辺値以外に用いられた配列名はその配列の先頭要素を指すポインタに変換される) */ int *p,k;/* int型のポインタとintのk */ p=t;/* int型のポインタにtの先頭アドレスを入れる */ *p=5; /* t[0] = 5; int型のポインタの先頭アドレスのところに5を入れる */ *(p+1)=3; /* t[1] = 3; int型のポインタに+1するとアドレスはintのサイズ分だけ増えるのでそこに3を入れる */ k=*p; /* k = t[0]; int型のポインタの先頭アドレスの値を取得*/ k=*(p+1); /* k = t[1] + 2; 配列の添え字と*演算子は等価 */ /* p[1] は意味的には同じだけど、配列として宣言されていないと使えない*/ /* *演算子で取得できるのは続くポインタの型 */
ヌルポインタ?
ptr = NULL; ptr = (void *)0;
STL
Boost
- shared_ptr
- weak_ptr?