
#include <stdio.h>
#include<string.h>
void StrReverse(char *st)
{
char s,*p1,*p2
p1=st
p2=st
while(*p2)
p2++//将指针p2移至字符串最后一个非空元素后
p2-=1//让指针指向最后一个非空元素
while(p1<p2)//两个指针一前一后向中间移动,交换数组元素
{
s=*p1
*p1=*p2
*p2=s
p1++
p2--
}
}
int main()
{
char a[80]
gets(a)
StrReverse(a)
puts(a)
}
#include <stdio.h>int main(int argc, char *argv[])
{
char c1, c2
c1 = 97
c2 = 98
printf("c1=%c, c2=%c\n", c1, c2)
printf("c1=%d, c2=%d\n", c1, c2)
return 0
}
(1)
Output:
c1=a, c2=b
c1=97, c2=98
//c1和c2都经过整数提升,所以传递到printf时都为int类型,本质区别只有%d和%c
%c
// 需要一个int类型参数,输出对应的ASCLL编码(可能+本地多字节编码方案)
%d
// 需要一个int类型参数,输出对应十进制数的表示方法
(2)
// 首先分析char类型,有signed char 和 unsigned char 两种,具体取决于实现
// 而char类型参考C语言标准,最少为一个字节长度,而大多数实现,都是一个字节长度
// (参考: <limits.h>)
// 假设char为一个字节长度
// 如果char对应底层类型为 signed char (window, cocoa, unix都这样)
// 那么对有符号数赋值大于它的最大值(127)的结果是不确定的
// 对应C语言,未定义结果
// 那么,最可怕的就是可能程序崩溃
// 再假设在window平台下,197会对应字 11000101 强制不考虑符号赋值
// 那么 c1值为 -59
// 整数提升为int(x32) FFFF FFFF FFFF FFC5
// int(x16) FFFF FFC5
// window下,默认内码为GBK编码,而对应GBK编码,上述无解
// 你有可能看到一个?,或者什么都没有,或者程序报错都可能
(烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫)
(3)
// 如果改为int,参考(1)的分析,结果相同
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)