#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;
}
这是一个反转字符串的程序。我不明白为什么程序仍然有效如果我在功能temp
中将int
定义为char
而不是reverse()
。由于数组v[]
的元素是char
类型,计算如何工作?
int
可以存储char
可以存储的所有可能值,以及更多。
因此,将char
值分配给int
会保留该值,并且分配回char
也会保留该值,因为该值来自char
。
在这种情况下你很好,因为任何char
实例都保证适合int
。
(请注意,像C中的'j'
这样的文字是int
类型,保证它可以适合char
)。
将有截断,您将收到编译器的警告。
由于字符也是小整数,因此在概念上分配到/从不同大小的整数来说并不那么复杂,但实际上,由于精度的差异,您可以丢弃位。
当然temp
是一个整数是没有意义的,我会选择const char
。