TweakPC

Zurück   Computer Hardware Forum - TweakPC > Games und Software > Programmiersprachen
Registrieren Hilfe Community Downloads

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04.02.2005, 17:06   #1 (permalink)
EoN
Kaffeejunkie
 
Benutzerbild von EoN
 

Registriert seit: 01.05.2002
Beiträge: 5.035

EoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer Anblick

Standard C: Arrays und Pointer

Hallo,

ich hab ein Problem mit einer Funktion in C:
Code:
void bubblesort(int *erg, int (*ptr)[1000], int *i) {
	int *p;
    p = (int *)ptr;
	int k, j, temp;
	for (k = 0; k < *i; k++) {
		for (j = 0; j < ((*i)-k-1); j++) {
			if (*p > *(p+1)) {
				temp = (*p);
				*p = *(p+1);
				*(p++) = temp;
			}
		}
	}
	p = (int *)ptr;
	for (k = 0; k < *i; k++) {
		printf("%i: %i\n",j, *p++);
	}
}
Die Übergabe im Aufruf funktioniert einwandfrei. Leider komm ich mit den Pointern nicht ganz klar um auf dem Array zu arbeiten. Gibt es denn da eine Möglichkeit wie bei Array's direkt ein bestimmtes Element X abzugreifen? Das würde mein Leben irgendwie erheblich erleichtern.

Wär für jede Hilfe dankbar
EoN ist offline   Mit Zitat antworten
Alt 04.02.2005, 18:55   #2 (permalink)
Die Kerrimaus
 
Benutzerbild von kerri
 

Registriert seit: 17.11.2003
Beiträge: 2.987

kerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz sein

Standard AW: C: Arrays und Pointer

Auf ein Bestimmtes Element des Arrays zugreifen geht ganz einfach mit arrayname[elementnummer] (z.B. array[3] liefert das 4. Element des Arrays array). Das funktioniert auch innerhalb von Funktionen, denen Du einen Pointer auf das erste Element des Arrays uebergeben hast.

Ich habs mal umgeschrieben und ne Main drumgebaut:

Code:
#include <stdio.h>

void bubblesort(int *arr, int i);

int main()
{
    int length=10;
    int array[length];
    int i;
    
    for (i=0;i<length; i++)
    {
	array[i]= (i+11)*91%17;  // fill with pseudo random numbers
	printf("%d ", array[i]);  
    }
    printf("\n");

    bubblesort (array, length);  // array itself is a pointer to the 0-th element i.e. &array[0]
                                // the variable array will be changed!! no copy of array is made 

    for (i=0;i<length; i++)            // print  the result
	printf("%d ", array[i]);

    printf("\n");

    return 0;
}

void bubblesort(int *arr, int i) 
{
    int k, j, temp;
    for (k = 0; k < i; k++) 
	for (j = 0; j < (i-k-1); j++) 
	    if (arr[j] > arr[j+1]) 
	    {
		temp = arr[j];
		arr[j] = arr[j+1];
		arr[j+1] = temp;
	    }    
}
Wie im code erwaehnt, liefert der aufruf von array die Adresse des 0-ten Elements daher koennte der Funktionsaufruf auch folgendermassen aussehen: bubblesort(&array[0], length);

Willst Du das urspruengliche Array nicht veraendern, musst Du vorher eine Kopie des Arrays erzeugen, das sieht dann z.B. so aus:

Code:
#include <stdio.h>

void bubblesort(int *arr, int *copy, int i);

int main()
{
    int length=10;
    int array[length];
    int result[length];
    int i;
    
    printf("input:\n");
    for (i=0;i<length; i++)
    {
	array[i]= (i+11)*91%17;  // fill with pseudo random numbers
	printf("%d ", array[i]);
    }
    
    bubblesort(array, result ,length);   // the variable array will NOT be changed!! 

    printf("\noutput:\narray:  ");
    for (i=0;i<length; i++) printf("%d ", array[i]);
    printf("\nresult: ");

    for (i=0;i<length; i++) printf("%d ", result[i]);
    printf("\n");

    return 0;
}

void bubblesort(int *arr, int *copy, int i) 
{
    int k, j, temp;

    for (k = 0; k < i; k++)  copy[k]=arr[k];      // first of all copy the array 

    for (k = 0; k < i; k++) 
	for (j = 0; j < (i-k-1); j++) 
	    if (copy[j] > copy[j+1])                        // then work on the copy
	    {
		temp = copy[j];
		copy[j] = copy[j+1];
		copy[j+1] = temp;
	    }   
 }
Gruesse, kerri

PS.: bitte nicht als Beispiel fuer Programmierstil benutzen, ich habs eben in der Schnelle zusammengefummelt
kerri ist offline   Mit Zitat antworten
Alt 04.02.2005, 19:02   #3 (permalink)
EoN
Kaffeejunkie
 
Benutzerbild von EoN
 

Registriert seit: 01.05.2002
Beiträge: 5.035

EoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer AnblickEoN ist ein wunderbarer Anblick

Standard AW: C: Arrays und Pointer

Und unser Prof hat immer nur damit gearbeitet die Pointer zu inkrementieren oder zu dekrementieren...


Danke Kerri, du bist die beste
EoN ist offline   Mit Zitat antworten
Antwort

Stichworte
arrays, pointer


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[C] So ne Sache mit nem void Pointer MasterMito Programmiersprachen 2 02.07.2008 15:08
Arrays an Funktionen übergeben in C++ Monk01 Programmiersprachen 1 05.10.2005 12:21


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36 Uhr.






Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum, Datenschutz Copyright © 1999-2015 TweakPC, Alle Rechte vorbehalten, all rights reserved