指针变量pa 指向一个拥有某种类型的数的单元 ,这个单元里存放着一个某种类型的数a
指针变量pb指向一个拥有某种类型的数的单元 ,这个单元里存放着一个某种类型的数b
*pa+*pb即取出a和b的值相加 a+b 然后把结果赋值给s
乱码的关键还是数据类型问题。char的值的范围(-128 ~ 127)
"字母Z向后错8位后在ASCII码表中进入了小写字母的范围"
pa=*pa+*pb;
if(*pa>'Z'||*pa>'z')
那是因为*pa的内容先被修改了,才做判断。当*pa原来是'Z'时,比如+9,就是99,进入了小写范围。这时你做判断if(*pa>'Z'||*pa>'z')就不对了。
先判断大小写,再分别对待,别嫌麻烦
我的代码
int main()
{
char s1[81];
char s2[81];
scanf("%s", s1);
scanf("%s", s2);
printf("\n");
unsigned char c1, c2; // 关键unsigned
for(int i=0; s1[i]!='\0' && s2[i]!='\0'; i++)
{
c1 = s1[i];
c2 = s2[i] - '0';
if(c1<'a') //大写字母(这里为了简单,默认都是英文字母)
{
c1 = s1[i] + c2;
if(c1>'Z')
c1 -= 26;
}
else //不是大写,那就是小写咯
{
c1 = s1[i] + c2;
if(c1>'z')
c1 -= 26;
}
s1[i] = c1;
}
printf("%s\n\n", s1);
return 0;
}
假设
int a = 3;
int b = 5;
int s = 0;
int *pa;
int *pb;
pa = &a;
pb = &b;
s = *pa + *pb; //相当于a+b
s = 8;
*表示间接运算符,能够通过pa这个指针所指向的地址去找到该地址的变量。
在这里,pa = &a; *pa = 3;
&表示取地址符,&a就是取到a这个变量的地址
pa和pb是两个指针,你又没提供其他内容,我姑且就认为是int型了。*pa和*pb就是取其内容
所以,s等于两个整数之和
*是取值的意思,而pa和pb都是地址,整个就是取pa的值和pb的值赋给s