array,Zeiger
-
#include <iostream>
using namespace std;
template <class typ>
void tausche(typ& d1, typ& d2)
{
typ t=d1;
d1=d2;
d2=t;
}template <class typ>
void sortiere(typ& d1, typ& d2)
{
if (d1>d2) tausche(d1,d2);
}template <class typ>
void sortiere(typ& d1, typ& d2, typ& d3)
{
sortiere(d1,d2);
sortiere(d2,d3);
sortiere(d1,d2);
}void main(void)
{
int a=3, b=7, c=1;
char* text="TeX"; /* warum geht hier char * nicht? */ //Hier die Fragecout << "Werte " << a << " " << b << " " << c << " sortieren..." << endl;
sortiere(a,b,c);
sortiere(text[0], text[1], text[2]);cout << "Sortiert: " << a << " " << b << " " << c << endl;
cout << "Sortiert: " << text[0] << " " << text[1] << " " << text[2] << endl;
}
-
Also in der 6.letzten Zeile etwa müßte es char text[]="TeX" ; heißen anstatt dem char* , das geht hier nicht .
Bin mal gespannt wer weiß warum. Ich weiß es nämlich nicht mehr.
Danke

-
1. C/C++ Tags verwenden! Gleich unter halb von diesem Smilie

2. "Geht nicht" ist eine nichts aussagende Fehlerbeschreibung.
3. Dein Code in der Art würde undefiniertes Verhalten auslösen. Der Zeiger auf ein Stringliteral hat konstant zu sein, denn in diesen Speicher darf man nicht schreiben, er gehört einem auch nicht. Dass man trotzdem einchar*nehmen kann, ist nur wegen der Rückwärtskompatibilität zu C.char* text1 = "TeX"; // Nur wegen rückwärtskompatibilität, sollte man aber vermeiden, // denn man hat keine Schreibrechte. char const* text2 = "TeX"; // So ist das sicherer und auch korrekt. // In deinem Programm führt das aber zu einem Kompilerfehler ;) char text3[] = "TeX"; // Allokiert beschreibbaren 4 Byte Speicher auf deinem Stack. // Die 4 Bytes kommen von der terminierenden 0, // es ist äquivalent zu folgendem: char text4[4] = { 'T', 'e', 'X', '\0' };Im übrigen solltest du vielleicht mal die Standardbibliothek anschauen. Vor allem zu nennen sind da std::string und die STL Algorithmen (swap & sort):
http://www.cplusplus.com/reference/string/
http://www.cplusplus.com/reference/algorithm/Grüssli