10.1 アドレス

ポインタの仕組み:アドレスとは

ポインタはC言語(および拡張言語)に特有の概念で、C言語を学び始めた初心者が必ずといっていいほどつまづく概念でもあります。ポインタがどうしても理解できないためにC言語に挫折してしまう方もいます。

p

アドレスの基本

コンピュータの記憶装置(メモリ)には、アドレスが付けられている。

shikumi

変数のアドレス

変数のアドレスを取得するには変数名の前にアンパサンド “&”をつけます。

int a = 123;

printf(“aのアドレス : %p\n”, &a);

配列のアドレス

配列の先頭をアドレスは、配列名だけで示します。要素のアドレスは&配列名[添字]で示します。

#include <stdio.h>

int main()
{
  char str[3] = "AB";

  printf("str[0]の要素のアドレス: %p\n", &str[0]);
  printf("strのアドレス: %p\n", str);

  getch();
  return 0;
}

 

 

二次元配列のアドレス

二次元配列の先頭アドレスは、配列名だけで示します。要素のアドレスは&配列名[行][列]で示します。

値とアドレスの表現

変数、1次元配列、2次元配列の整理

(要素)アドレス 先頭アドレス
変数 変数名 &変数名
1次元配列 配列名[添字] &配列名[添字] 配列名
2次元配列 配列名[行][列] &配列名[行][列] 配列名

 

printf と scanf の引数とアドレス

「値渡し」

int a = 10;
int str[] = "DEF";

printf("%d", a);  // 値渡し
printf("%s", str); // 参照渡し

 

「参照渡し」

int a;
int str[100];

scanf("%d", &a);
scanf("%s", str);

 

演習(P231)

一次元配列とそれぞれの要素のアドレスを表示するプログラムを作成

str[0]の要素の値        : 'A'
str[1]の要素の値        : 'B'
str[2]の要素の値        : 0x0 // 16進数で出力する
str[2]の要素の値        : ' '
str[0]の要素のアドレス  : 0019FF49
str[1]の要素のアドレス  : 0019FF4A
str[2]の要素のアドレス  : 0019FF4B
strの先頭要素のアドレス : 0019FF49