Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

bartek1648

Wskażniki|zamiana wierszy

Rekomendowane odpowiedzi

#include <stdio.h>

int main(void)
{
   int a[4][4] = {
       { 0, 0, 0, 0 },
       { 1, 1, 1, 1 },
       { 1, 1, 1, 1 },
       { 1, 1, 1, 1 }
   };
   int* wsk[4];
   wsk[0] = a[0];
   wsk[1] = a[1];
   wsk[3] = a[2];
   wsk[4] = a[3];

   int* temp; //zamiana wiersza 0 z 1
   temp = wsk[0];
   wsk[0] = wsk[1];
   wsk[1] = temp;

   int i, j;
   for (i = 0; i < 4; ++i)
   printf("%d\t",a[i][j]);

   return 0;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Eee ale chwalisz się, czy żalisz? :P

 

Jeżeli masz jakiś problem, to zacznij od przeczytania warningów kompilatora - powinien być uruchamiany tak, aby wypisywać prawie wszystko co się da (na dobry początek: -Wall w gcc/clang, /W4 w visualu).

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Panie Jeżu,

ja mam problem,

nie wiem dlaczego

na 1 pozycji jest jakaś liczba nie określona,

a tak wogóle wszytko tu ok?

https://zapodaj.net/c464e415f9d94.bmp.html

nie moge dodać obrazka jest wyżej na srtonie

 

wróć, jest żle, dlaczego wiersze się nie zmieniły, zaraz mnie szlak trafi

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak coś nie działa tak jak chcesz to na pewno gdzieś coś jest nie ok ;)

 

Dlaczego nie odniosłeś się do warningów? Taki clang z miejsca pokazuje, jak ślepemu, gdzie są błędy.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

jaki warning?

nie mam żadnych

teraz poprawiłem i :mad2:

#include <stdio.h>

int main(void)
{
   int a[4][4] = {
       { 0, 0, 0, 0 },
       { 1, 1, 1, 1 },
       { 1, 1, 1, 1 },
       { 1, 1, 1, 1 }
   };
   int* wsk[4] = { a[0], a[1], a[2], a[3] }; //takie przypisanie działa

/* wsk[0] = a[0];
   wsk[1] = a[1]; to nie działą, nie wiem dlaczego
   wsk[3] = a[2];
   wsk[4] = a[3];
*/
   int* temp; //zamiana wiersza 0 z 1
   // temp = wsk[0];
   wsk[0] = wsk[1];
   // wsk[1] = temp;cy

   int i, j;
   for (i = 0; i < 4; ++i)
       for (j = 0; j < 4; ++j)
           printf("%d\t", wsk[i][j]); //zmieniłem a[][] na wsk[][] wtf???????!!!!!!!to wsk nie modyfikuje tablicy??

   return 0;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A skonfigurowałeś środowisko by warningi były?

 

wsk[4] = a[3];

4 to indeks wychodzący poza tablicę.

 

Napiszesz w końcu co ma robić ten program? ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

racja,ale dlaczego a się nie zmodyfikowało?

 

racja,ale dlaczego a się nie zmodyfikowało?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Co się miało zmodyfikować?

O którym kodzie mówimy, z postu #5?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

obudwu , nigdzie się tablica a nie modyfikuje

printf("%d\t", wsk[j]);

printf("%d\t", a[j]);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nic się w niej nie zmienia bo nigdzie nie odnosisz się do jej elementów.

Jedyne co w programie robisz, to zmieniasz wartości w tabeli wsk.

Zmiana wskaźnika a zmiana wartości pod wskaźnikiem to dwie różne rzeczy.

 

Ale rozumiem że czaisz różnicę między tablicą dwuwymiarową statyczną, a dynamicznie alokowaną? ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

hmmm czy widze różnice, no nie

jestem przed czytaniem wykładu na temat dynamiczności,

ale dlaczego nie modyfikuje się, przeceiż tam są przekazywane adresy

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wybacz, ale inaczej niż komiksem tego wytłumaczyć nie mogę :D

 

Są cztery ulice (drewniana, paździerzowa, grochowa, cebulowa), a przy każdej po 4 domy. (tablica a)

 

Bierzesz kartkę, i na niej spisujesz nazwy tych ulic. (tablica wsk)

 

Poprawiasz spis tak, aby zamienić dwa pierwsze napisy miejscami. (zamiana z użyciem temp)

 

Jedyne co robiłeś, to mazanie po kartce - nigdy nie udałeś się na żadną z tych ulic, ani nie odwiedziłeś żadnego domu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a, no tak bo :hmm:

zmieniły się tylko w adresy w tej zmiennej, hmmm

ale jak teraz zmodyfikowałem wsk[0][1] = 1648; to się zmieniła wartość w a, no thx teraz rozumiem, dzięki

 

wróć, nie nie to oznacza że nie zmieniłem dalej adresów w tablicy, czyli robie od nowa :P

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...