Aritmetica dei puntatori

di Anonimizzato19537 il
5 risposte
Salve a tutti, ho questo esercizio e mi viene chiesto di stabilire quale sia l'output e di eliminare tutti gli usi dell'operatore di indicizzazione [], e la variabile i nella funzione f

#include <stdio.h>

int f (char s[], char t[], int n);

int main(void)
{
   char s[] = "123";
   char t[] = "12345";
   int b=11;

   printf ("%d\n", f(s,t,b));

 return 0;
}

int f (char s[], char t[], int n) 
{
   int i;

   for (i=0; s[i] == t[i]; i++)
	if (s[i]=='\0'|| --n <=0) return 0;

 return i;
}
l'output è 3, in quanto la funzione verifica quanti elementi delle due stringhe sono uguali ed incrementa i. Facendolo con l'aritmetica dei puntatori ho fatto cosi però non ho idea di come eliminare la variabile i, come posso fare? grazie

#include <stdio.h>

int f (char s[], char t[], int n);

int main(void)
{
   char s[] = "123";
   char t[] = "12345";
   int b=11;

   printf ("%d\n", f(s,t,b));

 return 0;
}

int f (char s[], char t[], int n) 
{
   int i=0;

   for (; *s == *t; s++, t++)
   {
	i++;
	if (*s=='\0'|| --n <=0) return 0;
   }

 return i;
}

5 Risposte

  • Ma se non devi usare [[ perché qui

    int f (char s[], char t[], int n)

    ci sono ancora?
  • Comunque ... devi restituire la differenza tra il puntatore s e il puntatore iniziale che memorizzerai nella funzione in un'altra variabile puntatore all'inizio.
  • Ciao oregon, non li ho levati solo perchè potevo usare direttamente i puntatori nel corpo della funzione per far prima . Non capisco come fare a restituire la differenza, devo prendere *s="3" e un puntatore *p che punta all'ultimo elemento di t e faccio la differenza?
  • No ... Ti ho scritto in modo preciso ...

    nella funzione dichiara un altro puntatore (lo chiami sini)
    assegna a tale puntatore il valore di s
    nella return restituisci il valore di s - sini
  • Grazie mille, funziona a perfezione
Devi accedere o registrarti per scrivere nel forum
5 risposte