Wpis z mikrobloga

#programowanie #cpp #pg

Byłem u prowadzącego na konsultacjach i zaczęło mi się trochę plątać,mając podane definicje,mamy zaznaczyć poprawne przypisania.

const int MAXN=8;
float x = 2.0;
double A[MAX
N];

using namespace std;
int main()
{
a) A[6]=sin(x)+x;
b) *(A+1)=.333;
c) * A =.333;
d) *A+1 = .333;
e) * A +1 =x;
f) *(A+1)=x;
}

Na pewno przejdzie sinus,* A=.333; *(A+1)=.333;

Ale prowadzący twierdził,że przejdzie też to * A+1=.3333;

w Codeblocks mi się to ostatnie nie kompiluje,jak myślicie?
  • 20
@yras8: A by przeszło, gdyby sin() był zadeklarowany gdzieś
B to klasyczna arytmetyka wskaźników i wyłuskanie, więc jest OK
C to wyłuskanie pierwszego elementu; to samo co A[0], więc też OK
D nie ma szans, bo *A+1 to rvalue
E to samo (białe znaki nie mają tu znaczenia)
F analogicznie do B też jest OK
@yras8: to jest w zasadzie tylko ciekawostka ceplusplusowa, takich cudów się nie robi w normalnych sytuacjach xD. Sam nie jestem pewien i dla pewności sprawdziłem na online compilerze:
1. To działa normalnie. Sumuje sinusa i iksa. (musisz miec tylko biblioteke np cmath)
2. Też działa normalnie. Jest to jako A[1]. O co chodzi? Nazwa tablicy bez operatora dostępu do tablicy (czyli tego "[]") mówi nam o wskaźniku, który w pamięci zapisuje