ポインタノート


ポインタ:コンピュータのメモリアドレスを格納する変数です.
ポインタ値:ポインタが指すメモリからデータを読み出す
オペレータ*:ポインタ変数を宣言したり、ポインタの値として使用したりできます.変数を宣言するときに使用される場合、*はポインタを宣言したことを示します.その他の場合は*でポインタの値を表します.
アドレスオペレータ&:メモリアドレスを参照します.変数名の前に&オペレータを使用すると、その変数のメモリアドレスが得られます.
//    int  
int * p;
//    int 
int val = 20;
//       int    
p = & val;
//     
int i = *p;
printf("%d
",i);

ポインタ変数に値を割り当てるときは、次の点に注意してください.
(1)ポインタ変数にはアドレスしか格納できません.int*ipPointer=10のようなポインタ変数に値を割り当てないでください.コンパイルでエラーが発生します.(2)ポインタ変数に割り当てられた変数アドレスタイプは、ポインタ変数を定義するタイプと一致します.
int iValue = 5;
float *ipPointer;
ipPointer = &iValue;//  。       ,    

関数パラメータとしてポインタ変数:
(1)ある変数のアドレスを別の関数パラメータに渡す役割(2)関数パラメータがポインタである場合、関数実パラメータは変数を指すポインタであるか、変数のアドレスであるかのいずれかである.
void F(int *pointer1, int *pointer2)
{ 
... 
}
1)F(&A,&B);
2)
int * P, *Q;
int p = 1,q = 2;
P = &p;
Q = &q;
F(P,Q);//F(p,q)    

ポインタと配列
C言語では、配列名は配列内のヘッダ要素のアドレスを表します.
  int array[100];
  int *point;
  point = array;
  point = array[0];

ポイント=arrayはpoint=array[0]と等価である.
ポインタと多次元配列
#include <stdio.h>


int main()
{
int a[3][4] =
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};


int *p = NULL;


p = a;
printf("a=%d
",*p); p = a[0]; printf("a[0]=%d
",*p); p = &a[0]; printf("&a[0]=%d
",*p); p = &a[0][0]; printf("&a[0][0]=%d
",*p); p = a[1]; printf("a[1]=%d
",*p); p = a[2]; printf("a[2]=%d
",*p); p = &a[0]+1; printf("&a[0]+1=%d
",*p); p = a[0]+1; printf("a[0]+1=%d
",*p); printf("&a[0]+1=%d
",&a[0]+1); printf("a[0]+1=%d
",a[0]+1); p = a+1; printf("a+1=%d
",*p); return 0; }

Cプログラムでは、2つの方法で1つの文字列にアクセスできます.
(1)文字配列で1文字列を格納する
(2)文字ポインタで文字列を指す
#include <stdio.h>
int main()
{
char str[] = "Hello!";
char *p = "Hi!";
printf("%s
",str); printf("%s
",p); return 0; }