T
jniordi schrieb:
Welche Anweisungen sind in dem Bsp erlaubt.
A int* p = &b;
B int* r = &a;
C int* q = a;
D char* z = c;
E s = *(c + 3);
Das ist im Prinzip alles klar. Ich frag mich aber warum ist C nicht möglich? Soll es nicht ein & vor a geben?
Ja
DAnn gibts einen Ausdruck dass die Referenzparameter weniger Speicherlpatz als die Wertparameter brauchen. Warum? Wie kann man da überprüffen?
Weil eben eine Referenz, also mehr oder weniger Zeiger, auf das Objekt übergeben wird und keine Kopie erstellt wird.
Überprüfen könnte man mit "ps"(unix/linux) oder dem taskmanager. ansonsten könnte man bei jedem ctor aufruf sich noch eine nachricht ausgeben lassen (std::clog).
int a[5]={5,3,1,15,6};
int* x = a+2;
warum wäre da x+=1 gültig???
[/cpp]
weil das array 5 elemente hat, der zeiger aber erst auf das dritte zeigt.
int x[3] = {1,2,3};
int *y = x; //(1)
*y = x[0]; //(2)
cout << *x; //(3)
Welche Aussagen sind wahr?
A Das Programm gibt 2 aus.
B x[2] entspricht *(x+2).
C Anweisung (1) ist nicht
zulässig.
D Das Programm gibt 1 aus.
E Anweisung (2) ist
zulässig.
A falsch
B wahr
C falsch
D wahr, weil (2) eine selbstzuweisung ist
E wahr, weil x und y auf gültige speicherbereich zeigen, allerdings auf den selben
Und das beste kommt aber bei dem da:
#include<iostream> // ohne .h!
void max(int *x, int y)
{
if (y > 0)
{
//*x = *x – 1;
*x -= 1;
max(x, y-1);
std::cout << *x << y;
}
}
int main()
{
int i = 6;
max(&i, 2);
return 0;
}
Notieren Sie die Ausgabe: 4142?
int b[5]={12,8,4,1,6};
int* y = b+3;
Welche Ausdrücke sind ausgehend
von dieser Situation erlaubt?
A y -= 2;
B *y = b[4];
C cout << *y + 6;
D cout << *(y + 1);
A ja
B ja
C "erlaubt": ja, erzeugt aber undefiniertes verhalten, wer es genau wissen will
D ja
nächstes mal bitte einfach selbst mal die programme kompilieren.
mfg