Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

pliki, funkcje, wskaźniki

Ostatnio zmodyfikowano 2017-06-21 15:39
Autor Wiadomość
rafalkoterski
Temat założony przez niniejszego użytkownika
pliki, funkcje, wskaźniki
» 2017-06-20 20:19:41
prosze o sprawdzenie moich odpowiedzi co do poniższych zadań, z góry dzieki
Takie zadania:
1) W pliku nietekstowym jest zapisane 8 liczb, od poczatku odczytano 3 liczby a nastepnie przesunieto wskaźnik o 2 liczby do przodu wzgledem aktualnej pozycji. Ile mozna jeszcze wykonac pojedynczycch operacji odczytu aby eof pozostał ustawiony na 0 ?
Moja odpowiedz to 2 takie pojedyncze operacje. dobrze ?

2)Dana jest macierz A[10][20]. Przekaż przedostatni wiersze tej macierzy do funkcji, jako aktualny parametr. Funkcja: void fun(int*wektor).
Moja odpowiedź: fun(&A[8]). Dobrze to jeest?


3) Wyzerować drugi element pierwszego składnika zmiennej y.
struct str{
float s1[20];
int s2;
};
str y;

Moja odpowiedź: y.s1[1]=0.

4) Fragment programu:
float a[10][20]
for(i=0;i<10;i++)
A[i][20]=0
Należy zmienić nawiasy [] na ().

To czwarte zadanie wydaje mi sie troche głupie i nie za bardzo wiem co mam tu zrobić.[/i]
P-162727
maly7
» 2017-06-21 02:05:02
2. Powinno być fun(A[8]). Nazwa tablicy wskazuje na jej pierwszy element, więc A[8] wskazuje na A[8][0].
3. Raczej dobrze :D
4. Żeby usunąć [] można zrobić np. tak:
C/C++
for( i = 0; i < 10; i++ )
     *( *( a + i ) + 19 ) = 0;
W podanym kodzie (pomijając, że nazwy tablic się nie zgadzają), 20. element leży poza tablicą, więc nie można się do niego dobrać. Myślę, że chodziło o 19 :D
P-162743
carlosmay
» 2017-06-21 02:58:14
1. 3 razy. EOF nie ustawia się na jeden gdy odczyt dojedzie do końca pliku,
tylko gdy już jesteśmy na końcu i próbujemy coś jeszcze odczytać.
P-162744
rafalkoterski
Temat założony przez niniejszego użytkownika
» 2017-06-21 14:43:46
dlaczego napisałeś że w zadnaiu drugim powinno być bez znaku "&" ?
P-162757
maly7
» 2017-06-21 15:39:12
Bo jeśli użyjesz znaku & przy nazwie jakiejś zmiennej to dostaniesz adres tej zmiennej, nazwa tablicy sama w sobie jest adresem pierwszego elementu.
Np:
C/C++
int a = 5; // &a zwróci adres zmiennej a

int a[ 5 ]; // &a[2] zwróci adres trzeciego elementu tablicy a

int a[ 5 ]; // a oraz &a[0] zwróci ten sam adres.

int b[ 5 ][ 5 ]; // &b[3][0] zwróci to samo co b[3].
Jeśli podajesz element musisz użyć &, w innym wypadku nie. To samo tyczy się tablic dwuwymiarowych.

Najlepszym sposobem na sprawdzenie działania to napisanie sobie jakiegoś prostego kodu i go przetestowanie. Wystarczy skompilować coś takiego:
C/C++
int a[ 5 ][ 5 ];
fun( & a[ 5 ] );

I otrzymasz taki warning:
C/C++
main.cpp: 14: 12: error: cannot convert int( * )[ 5 ] to int * for argument 1 to void fun( int * )
     fun( & a[ 5 ] );

P-162758
« 1 »
  Strona 1 z 1