请教大神一简单编程题,结果为什么是US22

请教大神一简单编程题,结果为什么是US22#include <stdio.h>
#include <string.h>
void fun(char *a,int b)
{ *a='0'+b;
b=(*a>'A')?1:0;
}
int main()
{ char s[]="USA";
int i=2;
fun(&s[i],i);
printf("%s%d",s,i);
return 0;
}

fun被调用时,传入了s[2]的地址并转化为char指针a,函数内能通过a中的地址对s[2]作改动;而后面的i只传入了值,形成了一个和i同值的拷贝b,函数内对b作任何操作都不能影响到i,所以函数运行完后s为US2,i还是2而不是0,连着输出就是US22追问

大神,不懂fun函数的意思,怎么通过a中的地址对S[2]改动?

追答

*a=0其实就是对指针a中储存的地址下的数据进行赋值

你应该看看C++关于指针的基本知识了

追问

求大神再解释一下
*a='0'+b;
b=(*a>'A')?1:0什么意思?

追答

你要参考运算符号优先级列表,表达式(*a>'A')?1:0表示如果*a>'A',就会返回1,否则返回0,然后这个返回值通过=赋值给b

追问

这个知道,我想问*a和'A'怎么比?

追答

同化为int,课本上都有

char->int->UInt->long->double<-float那种

追问

跟这个有什么关系?

追答

那我不知道你要问的什么了

左边是int类型,右边是char类型,不是要转化一下同一类型才能比较吗,难道我还要讲到 位运算?

追问

*a是2小于A65?所以b=0?

追答

追问

那对USA有什么影响?

USA怎么变US2?

追答

s[2]代表什么呢

追问

是A

追答

而你把它的地址传给了函数,函数就能通过指针的地址操作改变s[2]的值,所以又回到最开始的问题了....好无语

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答
大家正在搜