Introducción: para una matriz unidimensional, los parámetros de la matriz variables variables de puntero como parámetros, puede usar el método de subíndice y el método de puntero para referirse a los elementos de la matriz.
1. Parámetro de matriz
Método de subíndice (fácil de entender)
Dirección: & a [i]
Elemento: a [i]
Método de puntero (recomendado)
Ruinas de la tierra: a + i
Elemento: * (a + i)
? Debido a que el compilador interpreta un [i] como * (a + i), lleva tiempo, por lo que escribir directamente un [i] como * (a + i) puede mejorar la eficiencia de ejecución
2. Las variables de puntero como parámetros formales
Método de subíndice
Dirección: & p [i]
Elemento: p [i]
? Puntero
Dirección: p + i
Elemento: * (p + i)
Dos contrastes
- p + 1? p ++
- Ninguno es simple +1, 1 se refiere a 1 unidad de memoria
- p ++ ↔p = p + 1, el valor de p cambia
- p + 1 no cambia el valor de p
- a? p
- a es una dirección constante
- p es una variable de dirección
Resumen: para una matriz unidimensional,
En la función principal, use el nombre de la matriz como argumento,
En la función llamada, la matriz se usa como un parámetro formal, y el elemento de referencia se usa
Método de subíndice → fácil de entender
Método de puntero → Mejora la eficiencia
No es necesario usar variables de puntero
Ejemplos
Parámetro de matriz
1.1 Método de subíndice
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 método de puntero
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");
}
Variables de puntero como parámetros formales
1.3 Método de subíndice
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 método de puntero
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");
}