Tema: Re: masyvo elementu perdavimas funkcijai
Autorius: Kantega
Data: 2011-02-28 22:57:42
Ačiū, labai geras paaiškinimas :)
Pradedu po truputį graibytis situacijoj :)

> na, tai būtų elementari sintaksės klaida, nepraeitų pro kompilerį...

Kodėl gi?

Tai visai legali C sintaksė, net tokia keista programa turi kompliuotis:

int main() {
1, 2, 3;
return 0;
}

Tiesa, su -Wall turėtum gauti "warning: left-hand operand of comma 
expression has no effect".

Trumpiau tariant, DisplayData[5] = 'F', 'U', 'C', 'K', 'K'; yra validi C
sintaksė, tik daro visai ne tai, ką tu galvoji.

unsigned char DisplayData[5] — čia aprašai masyvą iš penkių elementų;
Realiai tavo elementai gali turėti indeksus nuo 0 iki 4.

DisplayData[5] = 'F', 'U', 'C', 'K', 'K'; — čia bandai priskirti 'F'
šeštam elementui (elementas su indeksu 5), kas yra už tavo masyvo ribų.
visos likusios raidės tiesiog ignoruojamos, todėl nenuostabu, kad 
išvedama belekas.

Inicializuok arba DisplayData[5] = {'F', 'U', 'C', 'K', 'K'} arba
DisplayData[6] = "FUCKK"; (6, nes toks deklaravimas automatiškai prideda 
\0). Ilgį galima ir praleisti: DisplayData[] = "FUCKK";

Iliustracijai:

#include <stdio.h>
#define MAXCHARS 5

void output_char(char one_char) {
printf("%c\n", one_char);
}

void output_array(const char chars[]){
int index = 0;

//sukam while kol neužsiranam ant \0
while (chars[index]) {
    output_char(chars[index++]);
}
}

int main() {
char display_data_one[MAXCHARS] = {'L', 'A', 'B', 'A', 'S'};

//tas pats kaip display_data_two[5] = {'V', 'I', 'S', 'O', '\0'}
char display_data_two[] = "VISO";

int i;

//einam su for per masyvą ir po vieną simbolį
// paduodam į funkciją
for (i = 0; i < MAXCHARS; i++) {
    output_char(display_data_one[i]);
}

//paduodam visą masyvą funkcijai
output_array(display_data_two);

return 0;
}