Arrays als Parameter (Adresse)



  • Hallo,
    mein Programm funktioniert nicht richtig.
    Ich verstehe nicht genau wie ich ein Array als Parameter übergebe.
    Ich muss aber die Adresse der Arrays übergeben, da ich diese direkt verändern möchte.

    Das Programm soll eine Matrix transponieren.
    Nur die Funktion "void trans(int *matrix)"
    und ihr Aufrufen funktioniert nicht.

    Danke schon mal im Voraus

    Hier der Code:

    #include <stdio.h>
    #define laenge 4
    
    void output(int matrix[laenge][laenge])
    {
    	int a, b;
    	for(a = 0; a < laenge; a++)
    	{
    		for(b = 0; b < laenge; b++)
    		{
    			printf("%d\t",matrix[a][b]);
    		}
    		printf("\n");
    	}	
    	printf("\n");
    }
    
    void matrixinput(int matrix[laenge][laenge])
    {
    	int a, b, i = 0;
    	for(a = 0; a < laenge; a++)
    	{
    		for(b = 0; b < laenge; b++)
    		{
    			matrix[a][b] = i;
    			i++;
    		}
    	}	
    }
    
    void trans(int *matrix)
    {
    	int tempMatrix[laenge][laenge];
    	int a, b;
    	for(a = 0; a < laenge; a++)
    	{
    		for(b = 0; b < laenge; b++)
    		{
    			 tempMatrix[a][b] = matrix[a][b];
    		}
    	}
    
    	for(a = 0; a < laenge; a++)
    	{
    		for(b = 0; b < laenge; b++)
    		{
    			 matrix[a][b] = tempMatrix[b][a];
    		}
    	}	
    }
    
    int main()
    {
    	int matrix1[laenge][laenge];
    
    	matrixinput(matrix1);
    	output(matrix1);
    	trans(matrix1);
    	output(matrix1);
    	return 0;
    }
    


  • Arrays werden in C immer als Adresse auf das erste Element übergeben. Das siehst du schon an deiner matrixinput-Funktion, wenn das nämlich nicht so wäre, würde das gar nicht funktionieren. Mach die Signatur bei trans so wie bei matrixinput und alles wird gut.

    Naja, und überlege dir einen Algorithmus fürs Transponieren, der ohne Hilfsmatrix auskommt. 🙂



  • Du könntest auch statt matrix[a][b];

    matrix[a*laenge+b];
    

    schreiben.*

    Da du das laenge als Makro definierst, solltest du dies in Großbuchstaben schreibn.
    Dann sieht man sofort, dass es kein Variable ist.

    *Das laenge ist hier die Dimension für den zweiten Index (b)



  • Bashar schrieb:

    Arrays werden in C immer als Adresse auf das erste Element übergeben. Das siehst du schon an deiner matrixinput-Funktion, wenn das nämlich nicht so wäre, würde das gar nicht funktionieren. Mach die Signatur bei trans so wie bei matrixinput und alles wird gut.

    Naja, und überlege dir einen Algorithmus fürs Transponieren, der ohne Hilfsmatrix auskommt. 🙂

    Vielen Dank für die Antwort 🙂

    Hier dein gewünschter Algorithmus ohne Hilfsmatrix

    void trans(int matrix[laenge][laenge])
    {
    	int a, b, x;
    
    	for(a = 0; a < laenge; a++)
    	{
    		for(b = 0; b < laenge-a; b++)
    		{
    			x = matrix[b+a][a];
    			matrix[b+a][a] = matrix[a][b+a];
    			matrix[a][b+a] = x;
    		}
    	}	
    }
    


  • Wo wir schonmal dabei sind, wo ist hier der Fehler? :p
    Das Programm soll die Zahlen von 1 bis zur eingegebenen Zahl aufsummieren und ausgeben. Klappt nur nicht 🙂

    #include <stdio.h>
    
    int main()
    {
    	int i = 1;
    	int ende = 0;
    	int ergebnis = 0;
    
    	printf("Geben Sie eine Zahl ein:\t");
    	scanf("%d",ende);
    
    	while (i<=ende)
    	{
    		ergebnis += i;
    		i++;
    	}
    
    	printf("Die Summe der aufsummierten Zahlen von 1 bis %d ist: \t%d\n",ende, ergebnis);
    	return 0;
    }
    


  • scanf erwartet eine Adresse (von der Variable) als Paramter.

    scanf("%d", &ende);
                ^ da
    


  • Richard vb schrieb:

    Klappt nur nicht 🙂

    Das sind die Fehlerbeschreibungen, die hier keiner lesen will.

    Ein paar Angaben dazu, was passiert und was du erwartest helfen den Helfern enorm.

    Die Meldung Die Summe der aufsummierten Zahlen von 1 bis 0 ist: 0 reicht schon, um zu sehen das mit ende etwas nicht stimmt.

    Nebenbei gibt der Compiler fürdiese Art Fehler auch Warnungen aus. Evtl. musst du sie nur aktivieren.



  • Ok, vielen Dank!
    Stimmt ja, war zuerst irritiert.

    char wort[laenge];
    printf("Gib ein Wort ein:");
    scanf("%s", wort);
    

    Hier muss dort kein & stehen, weil "wort" schon die Adresse ist, oder?



  • Ja.


Log in to reply