C语言编程作业?

C语言编程作业?,第1张

#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)的分析,结果相同


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12151842.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存