Cでポインターを理解していると仮定してみましょう。配列名は配列の最初の要素への定数ポインタです。 したがって、宣言では
double balance[50];
balanceは&balance [0]へのポインタであり、これは配列のバランスの最初の要素のアドレスです。 したがって、以下のプログラムフラグメントは、pをbalanceの最初の要素のアドレスとして割り当てます
double *p; double balance[10]; p = balance;
配列名を定数ポインタとして使用することは正当であり、その逆もあります。 したがって、*(残高+ 4)は残高[4]でデータにアクセスする正当な方法です。
最初の要素のアドレスを 'p'に格納すると、* p、*(p + 1)、*(p + 2)などを使用して配列要素にアクセスできます。 以下に、上で論じたすべての概念を示す例を示します
#include <stdio.h> int main () { /* an array with 5 elements */ double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; double *p; int i; p = balance; /* output each array element's value */ printf( "Array values using pointer\n"); for ( i = 0; i < 5; i++ ) { printf("*(p + %d) : %f\n", i, *(p + i) ); } printf( "Array values using balance as address\n"); for ( i = 0; i < 5; i++ ) { printf("*(balance + %d) : %f\n", i, *(balance + i) ); } return 0; }
Array values using pointer *(p + 0) : 1000.000000 *(p + 1) : 2.000000 *(p + 2) : 3.400000 *(p + 3) : 17.000000 *(p + 4) : 50.000000 Array values using balance as address *(balance + 0) : 1000.000000 *(balance + 1) : 2.000000 *(balance + 2) : 3.400000 *(balance + 3) : 17.000000 *(balance + 4) : 50.000000
上記の例では、pはdoubleへのポインタです。つまり、double型の変数のアドレスを格納できます。 上記の例で示したように、pにアドレスがあると、* pはpに格納されているアドレスで利用可能な値を返します。
No comments:
Post a Comment