2017-12-21 2 views
0
#include<stdio.h> 
#include<string.h> 

int reverse(char v[],int i,int j){ 
    char temp;//what happens if a define temp as an integer 
    if(j==1) 
     return 1; 
    temp=v[i];//computations 
    v[i]=v[j];//computations 
    v[j]=temp;//computations 

    reverse(v,++i,--j); 
} 


int main(void){ 
    char test[]="jimmakos"; 
    reverse(test,0,strlen(test)-1); 
    printf("%s",test); 
    return 0; 
} 

Dies ist ein Programm zum Umkehren eines Strings. Ich verstehe nicht, warum das Programm immer noch funktioniert, wenn ich temp als int anstelle von char in Funktion reverse() definieren. Da die Elemente des Arrays v[]char sind, wie funktionieren die Berechnungen?Gleichheit des Arrays mit einem unterschiedlichen Variablentyp

+1

'char' ** ist ** eine ganze Zahl. –

Antwort

0

Es wird abgeschnitten, und Sie erhalten Warnungen vom Compiler.

Da Zeichen auch kleine ganze Zahlen sind, ist das Zuweisen zu/von Ganzzahlen unterschiedlicher Größe konzeptionell nicht so kompliziert, aber in der Praxis können Sie natürlich Bits wegen der Unterschiede in der Genauigkeit fallen lassen.

Es gibt natürlich keine Punkt in temp mit einer ganzen Zahl sein, und ich würde stattdessen für ein const char gehen.

1

Ein int kann alle möglichen Werte speichern, die ein char speichern kann, plus mehr.

So ein char Wert auf ein int Zuweisung bewahrt, dass Wert und zurück zu einem char bewahrt auch den Wert zuweisen, da der Wert von einem char kam.

1

Sie sind in diesem Fall in Ordnung, da jede Instanz char garantiert ist in eine int passen.

(Beachten Sie, dass ein wörtlichen wie 'j' in C ein int Typ mit einer Garantie ist, dass es in ein char passen).

Verwandte Themen