はじめに:1次元配列、配列パラメーター↔パラメーターとしてのポインター変数の場合、添え字メソッドとポインターメソッドを使用して配列要素を参照できます。
1.配列パラメーター
?下付きの方法(わかりやすい)
住所:&[i]
元素:a[i]
?ポインタメソッド(推奨)
地址:a+i
元素:*(a+i)
?コンパイラは[i]を*(a + i)として解釈するため、時間がかかるため、[i]を*(a + i)として直接書き込むと実行効率が向上します。
2.仮パラメーターとしてのポインター変数
?下付きメソッド
住所:&p [i]
要素:p [i]
?ポインタ
住所:p + i
要素:*(p + i)
2つの対比
- p + 1?p ++
- どれも単純な+1ではありません、1は1つのメモリユニットを指します
- p ++↔p= p + 1、pの値が変化
- p + 1はpの値を変更しません
- a?p
- aはアドレス定数です
- pはアドレス変数です
概要:1次元配列の場合、
メイン関数で、配列名を引数として使用し、
呼び出された関数では、配列が仮パラメーターとして使用され、参照要素が使用されます
下付き表記→わかりやすい
ポインター方式→効率アップ
ポインタ変数を使用する必要はありません
例
配列パラメーター
1.1下付きの方法
void InputArray(int a[], int n) /* 形参声明为数组,输入数组元素值 */
{
int i;
for (i=0; i<n; i++)
scanf("%d", &a[i]); /* 用下标法访问数组元素 */
}
void OutputArray(int a[], int n) /* 形参声明为数组,输出数组元素值 */
{
int i;
for (i=0; i<n; i++)
printf("%4d", a[i]); /* 用下标法访问数组元素 */
printf("\n");
}
1.2ポインターメソッド
void InputArray(int a[], int n) /* 形参声明为数组,输入数组元素值 */
{
int i;
for (i=0; i<n; i++)
scanf("%d", a+i); /* 这里a+i等价于&a[i] */
}
void OutputArray(int a[], int n) /* 形参声明为数组,输出数组元素值 */
{
int i;
for (i=0; i<n; i++)
printf("%4d", *(a+i)); /* 这里*(a+i)等价于a[i] */
printf("\n");
}
仮パラメーターとしてのポインター変数
1.3下付きの方法
void InputArray(int *p, int n) /* 形参声明为指针变量,输入数组元素值 */
{
int i;
for (i=0; i<n; i++)
scanf("%d", &p[i]); /* 形参声明为指针变量时也可以按下标方式访问数组 */
}
void OutputArray(int *p, int n) /* 形参声明为指针变量,输出数组元素值 */
{
int i;
for (i=0; i<n; i++)
printf("%4d",p[i]); /* 形参声明为指针变量时也可以按下标方式访问数组 */
printf("\n");
}
1.4ポインターメソッド
void InputArray(int *p, int n) /* 形参声明为指针变量,输入数组元素值 */
{
int i;
for (i=0; i<n; i++)
scanf("%d", p+i); /* 用指针法访问数组元素 */
}
void OutputArray(int *p, int n) /* 形参声明为指针变量,输出数组元素值 */
{
int i;
for (i=0; i<n; i++)
printf("%4d", *(p+i)); /* 用指针法访问数组元素 */
printf("\n");
}