Al definir una función en C, ¿cuándo se utiliza int **a como argumento de función? ¿Cuál es la diferencia entre usar int a[] e int (* a)[] directamente? ¿Por favor explique en detalle?
Los parámetros en la definición de la función se denominan parámetros formales. Cuando se llama a una función, la persona que llama usa los datos del argumento como argumentos.
Si el parámetro real es la dirección de una variable de puntero unidimensional, entonces el parámetro formal debe ser un puntero bidimensional.
Por ejemplo: main()
{
int *p; //Define una variable de puntero p, p también tiene su propia dirección de almacenamiento, que puede guardarse en p La dirección de otra variable entera
int i=123
p=amp;i
init_i(amp;p); / Pasar en p dirección. p guarda la dirección de i
}
init_i( int **a )
{
printf("val=d \ n", **a); //*a es la dirección de i, **a es el valor de i
}
Lo anterior es solo para ilustrar que int * *a significa cuando Cuando el parámetro real es la dirección de una variable de puntero unidimensional, el parámetro formal debe ser un puntero bidimensional.
2. int a[]
Cuando el parámetro real es una matriz, generalmente escribimos el parámetro formal como int a[], o también se puede escribir como int *a
¡Lo que quieren decir es pasar la primera dirección del array a la subfunción!
3. int (* a)[10] ¡El 10 entre paréntesis es indispensable aquí!
Este es un puntero de matriz, es decir, a es un puntero de tipo de datos int[10] (una matriz de 10 elementos).
a 1 omite un espacio int[10]
a 2 omite dos espacios int[10]
Cuando el parámetro real es una matriz bidimensional Cuando , los parámetros se pasan así, por ejemplo
main()
{
int aa[3][10] //Definir un dos- matriz dimensional aa
init_i( aa , 3)
init_i( int (*a)[10] , int n )
{ p>
int i, j;
for( i=0; ilt; n; i)
for( j=0, jlt; 10; j) p>
a[i][j]=i*j;//Puedes operar a como una matriz bidimensional
}
.