C语言 新人请问一个有关问题

C语言 新人请教一个问题。
题目是:编写 2 个函数,一个实现字符串加密,一个实现字符串解密,加密的方法为 字符的 ASCII 码加 5,如果超过 Z,则返回到 A 继续,即 W+5 为 B。解密则 反过来运算。输入一个字符串输出加密和解密后的结果。 

我的代码是:#include<stdio.h>
char abc(char a[])                           //定义字符串加密的函数 
{
int i;
for(i=0;a[i]!='\0';i++)
{
  a[i]=a[i]+5;                           //每个字符ASCII码加上5 
  if(a[i]>90)                            //当ASCII码超过Z时     
  a[i]=a[i]-26; 
}
printf("加密后的字符串为:\n");            
for(i=0;a[i]!=0;i++)                     //输出加密后的字符串
printf("%c",a[i]);
printf("\n"); 
}
char cba(char a[])                           //定义字符串解密的函数 
{
int i;
for(i=0;a[i]!='\0';i++)    
{
   a[i]=a[i]-10;                 //每个字符ASCII码减10,即原来的字符减5 
   if(a[i]<65)                   //当ASCII码小于A时 
   a[i]=26+a[i];
}
    printf("解密后的字符串为:\n");
for(i=0;a[i]!=0;i++)             //输出解密后的字符串 
printf("%c",a[i]);
printf("\n");
}

int main()
{
char a[20];
printf("请输入字符串:\n");
gets(a);                         //输入字符串 
abc(a);
cba(a); 
}

功能已经实现, 但我弄不懂调用cba函数的时候为什么要a[i]=a[i]-10;而不是-5; 
调用abc函数的时候不是不改变原字符串吗?如果是-5的话就变回了原来的字符串。  
C语言

------解决方案--------------------
引用:
Quote: 引用:

楼主为什么认为解密是返回-10的操作呢?
假设a的话,加密+5变成了f,然后解密的话-5才能变成a的吧,如果-10,回不去了!


噢,,这点我理解错了。。  但是  假设经过加密函数abc后 a变成了f。 那下面调用解密函数的时候传给形参的值为什么是f而不是原先的a呢?  经过加密函数原字符串应该是不会变的啊?

第一:形参只有类型有用而已,里面放不放变量名都是没有关系的!
第二:因为你传的数组名,数组作为参数的时候和指针是一样的,操作的是地址!当你修改地址上的内容的时候,显然当你再通过地址访问的时候,它的值已经发生变化的的!而且你这样是才是正确的!要不然也达不到加密的作用了!