2016-09-05 5 views
-7

i Tutorial beobachtet haben, die erklären, wie Array zurückzukehren, von Funktionwarum das Array statisch ist

und dies ist ähnlich Code

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int *grn(); 

int main() 
{ 
    int *a; 
    a=grn(); 
    for(int i = 0;i<10;i++){ 
     printf("%d\n",a[i]); 
    } 
    return 0; 
} 

int *grn(){ 
    static int arrayy[10]; 
    srand((unsigned) time(NULL)); 
    for(int i=0;i<10;i++){ 
     arrayy[i]=rand(); 
    } 
    return arrayy; 
} 

und ich habe einige Fragen zu diesem Thema .. ist es gut funktionieren und erzeugen Zufallswerte innerhalb des Arrays, aber

  • warum die Funktion grn Zeiger

  • und warum a variable in der main function Zeiger ist?

  • warum ist die arrayy array statisch?
  • und warum sollte ich den grn-Funktionszeiger machen?

wenn ich versuche, diesen Code zu laufen, aber die arrayy Variable ist nicht statisch i bekommen segmentation fault

+3

[Siehe hier] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list). Was ist mit der Flut von absoluten Anfängerfragen in der letzten Woche? –

+3

SO ist keine Programmierschule. – Barmar

+0

_Es gibt entweder zu viele mögliche Antworten, oder gute Antworten wären für dieses Format zu lang. Bitte fügen Sie Details hinzu, um die Antwort einzuschränken oder um ein Problem zu isolieren, das in ein paar Absätzen beantwortet werden kann. –

Antwort

0
  1. Die Funktion ist nicht der Zeiger. Der Rückgabewert ist int *, da es ein Array von int zurückgibt.

  2. Sie benötigen einen Zeiger, um auf ein Array zuzugreifen. Wenn es kein Zeiger ist, erwarten Sie eine einzelne int Variable.

  3. Wenn es nicht statisch ist, wird das Array freigegeben und ist verschwunden, wenn die Funktion return erreicht hat. Das Array ist weder eine globale Variable noch ein reservierter Speicher im Heap. Daher wird die Zuordnung aufgehoben, wenn die Funktion return erreicht hat. Wenn Sie es static machen, funktioniert es wie eine globale Variable (nicht genau) und wird nicht freigegeben, wenn die Funktion das Ende erreicht.

  4. lesen Nummer 1.

Schließlich erhalten Sie segmentierte Fehler, weil die Funktion einen baumelnden Zeiger zurückgegeben, da das Array nicht static daher ist freigegeben, wenn die Funktion bis zum Ende erreicht.

+0

So ziemlich alles ist anders als "ein Array von int sollte ein Zeiger sein". Ein Array von int ist ein Array von int und Sie benötigen einen Zeiger, der auf Ganzzahlen zeigt, um auf alle Werte zuzugreifen, die in einem Array von Ganzzahlen gespeichert werden können. – Spidey

+0

@Spidey Danke für Ihre Korrektur. – user2821630

+0

obwohl sie meine Frage in die Warteschleife stellen, aber Sie antworten, machen Sie es einfach, diesen Code zu verstehen .. danke Mann – FRe34

Verwandte Themen