|
/* 2. Versuch, RICHTIG, da Objekte, auf die die */
/* Adressen zeigen, ausgetauscht werden */
void swap(int *px,int *py);
{
int temp;
temp = *px;
*px = *py;
*py = temp;
}
int main(void)
{
int a = 1, b = 2;
swap(&a,&b); /* Adressen übergeben */
printf("a=%d, b=%d\n",a,b); /* Diesmal klappt es: */
/* Ausgabe: a=2, b=1 */
return(0);
}
Im anschließenden Beispiel zur Ermittlung des betragsgrößten Elementes
einer n*n-Matrix mit Hilfe der Funktion maxval
kann das Ergebnis auch ohne return Anweisung übergeben werden.
Im Beispiel geschieht das über die Zeigervariable pamax.
Beim Aufruf der Funktion maxval wird &amax, die
Adresse von amax, als Argument übergeben. Die Zeigervariable
pamax von maxval zeigt dann auf amax, d. h. der
Parameter *pamax hat denselben Wert wie amax.
Die Berechnung in der Funktion maxval erfolgt mit *pamax.
Der von der Funktion maxval ermittelte Wert, auf den *pamax
zeigt, kann in der aufrufenden Funktion main als Variable
amax verwendet werden.
/* Betragsgroesstes Element einer n*n Matrix */
/* Rueckgabe mittels einer Zeigervariablen */
#include <stdio.h>
#include <math.h>
#define NMAX 5
int maxval(double a[NMAX][NMAX], int n, double *pamax);
int main(void)
{
double a[NMAX][NMAX] = { { 1.3, 2.6, -8.7, 23.4, 12.0 },
{ 777.0, 5.0, 3.1, -45.0, 0.1 },
{ 0.01, 33.7, 11.4, -1.0, 99.9 },
{ 1.0, -2.0, 3.0, -4.0, 1.1 },
{ 567.9, -222.0, 2.2, 3.14, -12.4 } };
double amax;
int i, j, n;
n = NMAX;
printf("Eingabedaten:\n");
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%f ", a[i][j]);
printf("\n");
}
maxval(a,n,&amax);
printf("betragsgroesstes Element= %f\n", amax);
}
void maxval(double a[NMAX][NMAX], int n, double *pamax)
{
int i,j;
*pamax = 0.0;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(fabs(a[i][j]) > *pamax)
*pamax = fabs(a[i][j]);
}
}
}
|
|
|