Ich würde gerne wissen, ob es eine Möglichkeit gibt, ein char-Array zurückzugeben. Ich versuchte etwas wie dieses "char[] fun()", aber ich erhalte Fehler.
Ich will keine Zeigerlösung. Danke!
Ich würde gerne wissen, ob es eine Möglichkeit gibt, ein char-Array zurückzugeben. Ich versuchte etwas wie dieses "char[] fun()", aber ich erhalte Fehler.
Ich will keine Zeigerlösung. Danke!
Arrays können in C nicht als Wert übergeben oder zurückgegeben werden.
Sie müssen entweder einen Zeiger und eine Größe für einen Puffer akzeptieren, um Ihre Ergebnisse zu speichern, oder Sie müssen einen anderen Typ zurückgeben, z. B. einen Zeiger. Ersteres wird oft bevorzugt, ist aber nicht immer passend.
C-Funktionen können keine Array-Typen zurückgeben. Funktionsrückgabetypen können alles andere sein als "Array von T" oder "Funktion, die T zurückgibt". Beachten Sie auch, dass Sie keine Array-Typen zuweisen können, d.h. Code wie der folgende wird nicht funktionieren:
int a[10];
a = foo();
Arrays werden in C anders behandelt als andere Typen; in den meisten Kontexten wird der Typ eines Array-Ausdrucks implizit von "N-Element-Array von T" in "Zeiger auf T" umgewandelt ("zerfällt"), und sein Wert wird so gesetzt, dass er auf das erste Element im Array zeigt. Die Ausnahmen von dieser Regel sind, wenn der Array-Ausdruck ein Operand von entweder der sizeof
oder Adresse-von ( &
), oder wenn der Ausdruck ein String-Literal ist, das zur Initialisierung eines anderen Arrays in einer Deklaration verwendet wird.
Angesichts der Erklärung
T a[N];
für einen beliebigen Typ T, dann ist Folgendes wahr:
Expression Type Decays to Notes
---------- ---- --------- -----
a T \[N\] T \* Value is address of first element
&a T (\*)\[N\] n/a Value is address of array (which
is the same as the address of the
first element, but the types are
different)
sizeof a size\_t n/a Number of bytes (chars) in array =
N \* sizeof(T)
sizeof a\[i\] size\_t n/a Number of bytes in single element =
sizeof(T)
a\[i\] T n/a Value of i'th element
&a\[i\] T \* n/a Address of i'th element
Wenn Sie ein Array-Argument an eine Funktion übergeben, erhält die Funktion aufgrund der impliziten Konvertierungsregel einen Zeigerwert und keinen Array-Wert:
int a[10];
...
foo(a);
...
void foo(int *a)
{
// do something with a
}
Beachten Sie auch, dass etwas wie
int *foo(void)
{
int arr[N];
...
return arr;
}
funktioniert nicht; sobald die Funktion beendet ist, wird das Array arr
technisch nicht mehr existiert und ihr Inhalt möglicherweise überschrieben wird, bevor Sie die Möglichkeit haben, sie zu benutzen.
Wenn Sie keine Puffer dynamisch zuweisen, ist es am besten, wenn Sie die zu ändernden Arrays als Argumente an die Funktion übergeben, zusammen mit ihrer Größe (da die Funktion nur einen Zeigerwert erhält, kann sie nicht sagen, wie groß das Array ist):
int a[10];
init(a, sizeof a / sizeof a[0]); // divide the total number of bytes in
... // in the array by the number of bytes
void init(int *a, size_t len) // a single element to get the number
{ // of elements
size_t i;
for (i = 0; i < len; i++)
a[i] = i;
}
A Array von einer benutzerdefinierten Funktion an die Hauptfunktion zurückgibt. hilft!! Unten habe ich den kompletten Code angegeben, damit jeder versteht wie genau es funktioniert? :) :)
#include<iostream>
using namespace std;
char * function_Random()
{
int i;
char arr[2];
char j=65;//an ascII value 65=A and 66=B
cout<<"We are Inside FunctionRandom"<<endl;
for(i=0;i<2;i++)
{
arr[i]=j++;// first arr[0]=65=A and then 66=B
cout<<"\t"<<arr[i];
}
cout<<endl<<endl;
return arr;
}
int main()
{
char *arrptr;
arrptr=function_Random();
cout<<"We are Inside Main"<<endl;
for(int j=0;j<2;j++)
{
cout<<"\t"<<arrptr[j];
}
return 0;
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.