Subscript väärinpäin

akx 14.08.05 20:49

C-standardin ihmeellisyyksiä.

 Tekstiversio  Arvo: 1 (1 ääntä)  Äänestä: +  -
// The definition of the subscript operator  []  is  that  E1[E2] is identical to (*(E1+(E2))).
// Jommankumman (E1 tai E2) tulee olla kokonaislukumuuttuja ja toisen pointteri.
// Missään ei sanota, miten päin niiden tulee olla.
// Ei varoituksia tai virheitä (gcc -o ti.exe -Wall ti.c).

#include <stdio.h>

int main()
{
 int t[5]={1,2,3,4,5};
 int i;
 for(i=0;i<5;i++) printf("%d ",t[i]);
 printf("\n");
 4[t]=100;
 for(i=0;i<5;i++) printf("%d ",t[i]);
 return 0;
}

editoitu: 02:12 15.8.05
Ceez 21:30 14.8.05 
Kylpä nakkas erroria
editoitu: 18:35 15.8.05
phadej 22:04 14.8.05 
main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}

tosin sanoen: näin voi tehdä, mutta ei pitäisi.
Ztane 15:34 15.8.05 
Ceez kirjoitti:
Kylpä nakkas erroria
Sulla on rikkinäinen kääntäjä!
akx 15:44 15.8.05 
phadej kirjoitti:
tosin sanoen: näin voin tehdä, mutta ei pitäisi.

Niin saa tehdä, mutta se ei ole kovin intuitiivista. Ehkä tuo on vain hyvän koodaustavan vastaista.
Linkku 17:28 15.8.05 
Ceez kirjoitti:
Kylpä nakkas erroria

Et halua kertoa kääntäjääsi?
editoitu: 09:57 17.8.05
Ztane 00:11 16.8.05 
lisää hauskaa C++:ssa:
C++
#include <iostream>
class y {
public:
    char operator[](int x) {
        return '0' + x;
    }
    operator const char*() {
        return "ab";
    }
};
int main() {
    y z;
    std::cout << z[1] << " vs " << 1[z] << endl;
}
 
EDIT: sisennykset.
EDIT2: ulostus
Ceez 01:57 16.8.05 
Eipäs periaatteessa nakannutkaan, bugasin ite.
Linkku 09:46 16.8.05 
Yksi kommentti vielä.

Toi akx:n koodi on aika helvetin epäluettavaa. Eihän siitä saa selvää suurennuslasillakaan, kun taas Ztanen koodista saa heti selvää.

cpp
#include <stdio.h>

int main()
{
    int t[5] = { 1, 2, 3, 4, 5 };
    int i;

    for(i=0; i<5 ;i++)
        printf("%d ", t[i]);

    printf("\n");
    4[t] = 100;

    for(i=0; i<5 ;i++)
        printf("%d ", t[i]);

    return 0;
}
 
akx 13:50 16.8.05 
Lyhyt pätkä, en kiinnittänyt tyyliin niin paljoa huomiota. Muutenkinvälilyönnitonturhia. ;)
Chrysalid 22:04 11.11.05 
Muuten hyvä, mutta tiedossahan asia on ollut jo kauan. Osoittimet ovat hieno asia C:n koukeroissa :P