[C] Błąd porównania przy wskaźniku?
Ostatnio zmodyfikowano 2021-03-10 19:13
kocotian Temat założony przez niniejszego użytkownika |
[C] Błąd porównania przy wskaźniku? » 2021-03-10 11:34:30 Mam taką oto funkcję: #define MAX(A, B) ((A) > (B) ? (A) : (B))
static long max( long * t, size_t n ) { long m = * t; long * u = t-- + n; while( ++t < u ) { printf( "BEF: | m = %d, *t = %d\n", m, * t ); m = MAX( m, * t ); printf( "AFT: | m = %d, *t = %d\n", m, * t ); } return m; }
dodałem do niej printf'y, żeby sprawdzić wartość zmiennych, i niestety porównanie wartości nie działa. Spróbowałem także napisać to z if'em, jednak wciąż nie chce działać: static long max( long * t, size_t n ) { long m = * t; long * u = t-- + n; while( ++t < u ) if( * t > m ) m = * t; return m; }
Po podaniu t = [1, 2, 3, 4, 5, 6, 7, 8] oraz n = 8 (zapisane tutaj symbolicznie) zatrzymuje się na dwójce. Co może być tutaj błędnie? Pozdrawiam |
|
kocotian Temat założony przez niniejszego użytkownika |
» 2021-03-10 11:49:04 Dodam tylko że przetestowałem to z dynamicznie zaalokowaną tablicą: size_t n = 8; long * t = malloc( sizeof( * t ) * n ); max( t, n );
i tutaj działa wszystko, zarówno porównanie jak i liczby wyświetlane w printf'ie, jednak po przekazaniu do funkcji takiej oto tablicy: działają tylko wartości w printf'ie, porównanie nie działa. Dodatkowo jeśli w argumentach funkcji zmienię max( long * t, size_t n )
na max( long t[ 8 ], size_t n )
to efekt pozostaje taki sam. Pozdrawiam |
|
pekfos |
» 2021-03-10 19:13:15 Podaj jeden kompilowalny kod. |
|
« 1 » |