000
27.03.2006, 14:43 Uhr
ref
|
In diesem beispiel , ist der wert von str wie erwarted geändert , weil str ist ein zeiger und sein adresse beeinflußt wird .
C++: |
#include<iostream> #include<cstdio> #include<cstring> using namespace std; void stradd(char *s1, char *s2); void stradd(char *s1,int i);
int main() { char str[80]; strcpy(str, "Hallo"); stradd(str,"dort"); cout<< str <<"\n";
stradd(str, 100); cout << str<<"\n";
return 0; } // verbinde zwei zeichenketten void stradd(char *s1,char *s2) {
strcat(s1,s2);
}
// verbinde eine zeichenkette und // ein int (als zeichenkette) void stradd(char *s1,int i) { char temp[80];
sprintf(temp,"%d", i); strcat(s1, temp); }
|
resultat:
Hallodort Hallodort100
also in strcat(s1, s2); wird nicht nur s1 geändert sondern str auch ich habe dann anderungen in diesem code gemacht , die zeigern s1 und s2 durch normale arrays ersetzt ,ich wollte wissen ob normale arrays wie zeigern verhalten oder integers
C++: |
#include<iostream> #include<cstdio> #include<cstring> using namespace std; void stradd(char s1[10], char s2[10]); void stradd(char *s1,int i);
int main() { char str[80]; strcpy(str, "Hallo"); stradd(str,"dort"); cout<< str <<"\n";
stradd(str, 100); cout << str<<"\n";
return 0; } // verbinde zwei zeichenketten void stradd(char s1[10],char s2[10]) {
strcat(s1,s2);
}
// verbinde eine zeichenkette und // ein int (als zeichenkette) void stradd(char *s1,int i) { char temp[80];
sprintf(temp,"%d", i); strcat(s1, temp); }
|
selbe resultat : Hallodort Hallodort100
die frage , warum verhalten normale arrays NICHT wie integers ??,es handelt sich hier nicht um adressen , oder? bei integers wird kopien gemacht und so die werte in main wird NICHT geändert wie diese code zeigt :
C++: |
// Listing 11.4 Zeigt die Übergabe als Wert
#include <iostream>
void swap(int x, int y);
int main()
{
int x = 5, y = 10;
std::cout << "Main. Vor Vertauschung, x: " << x
<< " y: " << y << "\n";
swap(x,y);
std::cout << "Main. Nach Vertauschung, x: " << x
<< " y: " << y << "\n";
return 0;
}
void swap (int x, int y)
{
int temp;
std::cout << "Swap. Vor Vertauschung, x: " << x
<< " y: " << y << "\n";
temp = x;
x = y;
y = temp;
std::cout << "Swap. Nach Vertauschung, x: " << x
<< " y: " << y << "\n";
}
resultat : Main. Vor Vertauschung, x: 5 y: 10 Swap. Vor Vertauschung, x: 5 y: 10 Swap. Nach Vertauschung, x: 10 y: 5 Main. Nach Vertauschung, x: 5 y: 10
|
-- Man kann ein Problem nicht mit der gleichen Denkweise lösen, mit der es erschaffen wurde. (Albert Einstein) |