请教大神一简单编程题,结果为什么是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函数的意思,怎么通过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]的值,所以又回到最开始的问题了....好无语