QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 827|回复: 5

一个c方面的菜鸟问题?!

[复制链接]
发表于 2005-2-15 20:52:25 | 显示全部楼层 |阅读模式
最近我看到一资料上的c程序谈到把数组作为函数参数传递的问题,有两段程序如下:#include <stdio.h>
    #include <ctype.h>
    void print_upper();
    main() /* print string as uppercase */
    {
         char s[80];
         gets(s);
         print_upper(s);
     }
     void print_upper(string)
     char *string;
     {
         register int t;
         for (t=0;string[t];++t){
              string[t]=toupper(string[t]);
              printf ("%c",string[t]);
         }
      }
____________________________________________________________________
    #include <stdio.h>
    #include <ctype.h>
    void print_upper();
    main() /* print string as uppercase */
    {
         char s[80];
         gets(s);
         print_upper(s);
     }
     void print_upper(string)
     char *string;
     {
         register int t;
         for (t=0;string[t];++t)
              printf ("%c",toupper(string[t]));
      }
_______________________________________________________________________
该资料上说这两段程序调用完print_upper()函数后第一段程序在main()中的数组s的内容就变成了大写子母,而第二段程序中数组s的内容保留了原样,没有改变!
它们不是都用数组名作为参数来传递的吗,怎么会效果不一样呢???
如果是资料上错了那么要达到保留数组s的内容,让它不会在调用函数print_upper()后发生改变,除了用值传递的方法来传递函数参数,并对s中的字符一个一个的调用print_upper()函数外,有没有效率高的方法???
发表于 2005-2-15 21:28:50 | 显示全部楼层
资料上没有错
这样的话,数组中的值不会被改变....
但是都可以达到输出大写字符的目的
回复

使用道具 举报

发表于 2005-2-15 21:38:40 | 显示全部楼层
新写的例子
例子1
#include <stdio.h>
#include <ctype.h>
void print_upper();
main() /* print string as uppercase */
{
char s[80];
gets(s);
print_upper(s);
printf("\n%s\n",s);
}
void print_upper(string)
char *string;
{
register int t;
for (t=0;string[t];++t){
string[t]=toupper(string[t]);
printf ("%c",string[t]);
}
}
------------------------------------------------------------
例子2
#include <stdio.h>
#include <ctype.h>
void print_upper();
main() /* print string as uppercase */
{
char s[80];
gets(s);
print_upper(s);
printf("\n%s\n",s);
}
void print_upper(string)
char *string;
{
register int t;
for (t=0;string[t];++t)
printf ("%c",toupper(string[t]));
}
回复

使用道具 举报

 楼主| 发表于 2005-2-16 11:00:42 | 显示全部楼层
是不是toupper()函数使用了值传递的方法,第一种方法通过toupper()转化后把改变后的值赋给了string[t],而第二种方法没有!我只注意到upper()函数的参数传递了,看来是在toupper()函数上,谢了!
回复

使用道具 举报

发表于 2005-2-16 11:12:00 | 显示全部楼层
toupper本身不改变字符,我想不同的是这句: string[t]=toupper(string[t]);
回复

使用道具 举报

 楼主| 发表于 2005-2-16 12:40:16 | 显示全部楼层
是呀,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 15:33 , Processed in 0.045900 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表