Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- Mit Zeiger in Array schreiben (C) (http://www.informatikerboard.de/board/thread.php?threadid=1717)


Geschrieben von nano99 am 29.11.2013 um 21:33:

  Mit Zeiger in Array schreiben (C)

Meine Frage:
Hi,

ich möchte gerne ein C-Programm schreiben, dass mithilfe eines Zeigers in einer Funktion Werte in ein Array schreibt.
Mein bisheriges Programm funktioniert allerdings noch nicht: beim Kompilieren entstehen schon diverse Warnungen und bei der Ausführung wird nur extrem langer Kauderwelsch ausgegeben.

Meine Ideen:
Mein bisheriges Programm:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
#include <stdio.h>

#define ARR_LEN 7

void schreibeArray(int *numList)
{
 *numList[0]=12;
 *numList[1]=28;
 *numList[2]=10;
 *numList[3]=9;
 *numList[4]=-2;
 *numList[5]=-13;
 *numList[6]=37;
}

int main()
{
 int daten[ARR_LEN];
 int i;
 daten[0]=7;
 daten[1]=15;
 daten[2]=73;
 daten[3]=-9;
 daten[4]=23;
 daten[5]=-85;
 daten[6]=54;
 for(i=0; i<ARR_LEN; i++) { printf("%d, ",daten[i]); }
 printf("\n");
 schreibeArray(&daten);
 for(i=0; i<ARR_LEN; i++) { printf("%d, ",daten[i]); }
 return 0;
}


Kann mir jemand sagen, wie das Programm richtig lauten müsste?
Bei korrekter Ausführung sollte also folgende Ausgabe entstehen:

code:
1:
2:
3:
4:
7, 15, 73, -9, 23, -85, 54, 
12, 28, 10, 9, -2, -13, 37, 


Über hilfreiche Antworten wäre ich sehr dankbar. smile

LG,
nano99



Geschrieben von eulerscheZahl am 29.11.2013 um 21:57:

 

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
#include <stdio.h>

#define ARR_LEN 7

void schreibeArray(int *numList)
{
	*(numList + 0) = 12;
	*(numList + 1) = 28;
	*(numList + 2) = 10;
	*(numList + 3) = 9;
	*(numList + 4) = -2;
	*(numList + 5) = -13;
	*(numList + 6) = 37;
}

int main()
{
	int daten[ARR_LEN];
	int i;
	daten[0] = 7;
	daten[1] = 15;
	daten[2] = 73;
	daten[3] = -9;
	daten[4] = 23;
	daten[5] = -85;
	daten[6] = 54;
	for(i = 0; i < ARR_LEN; i++) 
		printf("%d, ", daten[i]);
	printf("\n");
	//schreibeArray(&daten[0]);
	schreibeArray(daten);
	for(i = 0; i < ARR_LEN; i++) 
		printf("%d, ", daten[i]); 
	return 0;
}



Geschrieben von nano99 am 01.12.2013 um 18:11:

 

Hi,

vielen Dank, das war genau das, was ich gesucht habe. smile

Aber wie würde das denn für zwei- oder dreidimensionale Arrays aussehen?

LG,
nano99



Geschrieben von eulerscheZahl am 01.12.2013 um 18:49:

 

Intern kannst du dir auch ein zweidimensionales Array als ein eindimensionales vorstellen. Die Variablen liegen im Speicher direkt hintereinander, weshalb du in die nächste "Zeile" gelangst, indem du den Wert der x-Dimension aufaddierst.

Nachfolgend ein Beispiel für ein zweidimensionales Array. Das (int*) brauchst du nicht zwingend, erspart dir aber Warnungen des Compilers.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
#include <stdio.h>

#define ARR_LEN 5

void printArray(int *numList)
{
	int x, y;
	for(y = 0; y < ARR_LEN; y++)
	{
		for(x = 0; x < ARR_LEN; x++)
			printf("%3d  ", *(numList + x + y * ARR_LEN));
		printf("\n");
	}
}

void schreibeArray(int *numList, int faktor)
{
	int x, y;
	for(x = 0; x < ARR_LEN; x++)
		for(y = 0; y < ARR_LEN; y++)
			*(numList + x + y * ARR_LEN) = x + faktor * y;
}

int main()
{
	int daten[ARR_LEN][ARR_LEN];
	schreibeArray((int*)daten, 1);
	printArray((int*)daten);
	printf("\n");
	schreibeArray((int*)daten, 10);
	printArray((int*)daten);
	return 0;
}


Forensoftware: Burning Board, entwickelt von WoltLab GmbH