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

[C] Błąd porównania przy wskaźniku?

Ostatnio zmodyfikowano 2021-03-10 19:13
Autor Wiadomość
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ę:
C/C++
#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ć:
C/C++
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
P-178266
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ą:
C/C++
size_t n = 8;
long * t = malloc( sizeof( * t ) * n );
/* ... wypełnianie tablicy ... */
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:
C/C++
long t[ 8 ];
/* ... wypełnianie tablicy ... */
max( t, n );
działają tylko wartości w printf'ie, porównanie nie działa.

Dodatkowo jeśli w argumentach funkcji zmienię
C/C++
max( long * t, size_t n )
na
C/C++
max( long t[ 8 ], size_t n )
to efekt pozostaje taki sam.

Pozdrawiam
P-178267
pekfos
» 2021-03-10 19:13:15
Podaj jeden kompilowalny kod.
P-178270
« 1 »
  Strona 1 z 1