最終更新:2017-01-16 (月) 17:43:07 (2649d)  

ポインタ
Top / ポインタ

C++ ポインタ ブートキャンプ from Kohsuke Yuasa

用語

ポインタ型?

ポインタ値?

  • アドレス

ポインタ変数

演算子

&アドレス演算子?参照演算子?変数のアドレスを取得
*(アドレス)関節参照演算子逆参照演算子?ポインタが指す変数を使う。[]と同じ
->アロー演算子?メンバ選択演算子?

  • 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

ポインタの裏話


このPDFへのリンク

関連

参考