Práctica de puntero (3)


Ejemplo de matriz y puntero (1)
Encuentre los valores máximo y mínimo de 10 números

#include<stdio.h>
int max,min;
void max_minjudge(int arr[10],int n);
int main()
{
    
    
     int arr[10];
	 int i;
	 printf("请对10个数进行初始化\n");
	 for(i=0;i<10;i++)
	 {
    
    
		 scanf("%d",&arr[i]);
	 }
     max_minjudge(arr,10);
	 printf("max=%d,min=%d\n",max,min);

	 return 0;
}
void max_minjudge(int arr[10],int n)
{
    
    
	int *p,*arr_end;
	arr_end=arr+n;
	max=min=*arr;
	for(p=arr+1;p<arr_end;p++)
	{
    
    
		if(*p>max)
			max=*p;
		else if(*p<min)
			min=*p;
	}
}

Análisis de código:
int max, min; son variables globales.
max = min = * arr; en esta sección, el símbolo de valor ✳ se puede usar directamente porque el nombre de la matriz es la dirección. Toma el primer elemento de la matriz.

Al mismo tiempo, definir el primer elemento de la matriz como el valor máximo y mínimo no entra en conflicto, porque max y min son dos variables, simplemente asígneles el mismo valor y compárelos con los elementos restantes.

Compartiendo el punto equivocado
Al principio escribí el subarrendador así al codificar:

void max_minjudge(int arr[10],int n)
{
    
    
	int *p;
	max=min=*arr;
	for(p=arr+1;p<10;p++)
	{
    
    
		if(*p>max)
			max=*p;
		else if(*p<min)
			min=*p;
	}
}

Los resultados de la operación son los siguientes:
Inserte la descripción de la imagen aquí
For (p = arr + 1; p <arr_end; p ++)
p = arr + 1 es el nombre de la matriz más un número para indicar el número de elementos desde el principio, cuando p <arr_end (Nota: arr_end = arr + n) Cuando se
cambia a p <10, no se puede ejecutar todo el cuerpo del bucle y no se puede hacer ningún juicio, por lo que permanece en el primer elemento.
Entonces, el resultado de salida es que los valores máximo y mínimo son ambos 11.
Porque p aquí es un puntero (es decir, una dirección) y su valor correspondiente no puede ser un valor a menos que * p.

Supongo que te gusta

Origin blog.csdn.net/yooppa/article/details/112803121
Recomendado
Clasificación