K
Dann bin ich mal so frei, und räume die Zweifel aus (sowas lasse ich ungern auf mir sitzen, nix für ungut):
square_array() bekommt als Argumente:
- einen Zeiger auf einen Zeiger. Würde auch nur mit einem Zeiger funktionieren, weil dieser Zeiger nicht verändert wird.
- einen Zeiger auf int. Würde ebenfalls ohne Zeiger funktionieren, weil auch hier nichts geändert wird.
- einen Zeiger auf einen Zeiger auf einen Zeiger. Hier mache ich das, weil ich ich den Zeiger aus der Main (*output) umbiegen möchte auf einen anderen Zeiger. Würde ich nur einen Zeiger auf einen Zeiger verwenden, würde eine Kopie des Zeigers aus der Main angelegt, dieser umgebogen und die Umleitung fände nur in der Funktion, aber nicht in der Main statt.
Indem du diese Variable nur in der Funktion selbst verwendest und nicht nach draußen gibst.
Ich will die Variable und deren Speicher natürlich nutzen. Deshalb ganz grundsätzlich: Kann ich innerhalb einer Funktion Speicher reservieren und der aufrufenden Funktion diesen zur Verfügung stellen?
EDIT: Mea culpa, Wutz hatte natürlich recht, es ginge grundsätzlich auch anders und mein Ansatz ist ein Zeiger-Overkill. Mein Ansatz ohne dies wäre:
int square_array(int* input,int n, int** output);
int main()
{
int i,n=10;
int* input = malloc(n*sizeof(*input));
if (input==NULL) return -1;
int* output;
for(i=0; i<n; i++)input[i]=i;
square_array(input,n,&output);
for(i=0; i<n; i++)printf("%d ",input[i]);
printf("\n");
for(i=0; i<n; i++)printf("%d ",output[i]);
printf("\n");
return 0;
}
int square_array(int* input, int n ,int** output)
{
int i, *buffer = malloc(n*sizeof(*buffer));
*output=buffer;
if(*output==NULL)return -1;
for(i=0; i<n; i++)(*output)[i]=input[i]*input[i];
return 0;
}
Ist eigentlich einfach zu merken: Will man einen Wert ändern und außerhalb einer Funktion nutzen, ohne return zu verwenden, ist ein Pointer auf diesen Wert hilfreich.
Dennoch bleibt meine grundsätzliche Frage bestehen. Diese Version funktioniert zwar, aber die Frage ist: Ist der SPeicher, welchen ich in square_array allokiert habe, auch außerhalb davon gültig (besonders in der Main)?