立即注册
 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广州大学城网业务调整

[C]以字符数组为参数调用对应函数时 [复制链接] qrcode

查看: 11165 | 回复: 0

523066680
发表于: 2010-2-19 13:25:25 | 显示全部楼层

写了一函数, void func(char str[]);
函数中有一个句子是对某个字符修改的 ,str[3]='x';

调用句子是: func("abcde");
结果就提示出错了。

原因从教材中找出:   以数组作为参数的时候,是以数组首地址作为传递的,
所以在函数中对数组修改也会改动到原先层次的数组,其实那就是共用地址。

我直接func("abcde"); 只是传递了一串字符串,而没有了用来存储信息的地址。
所以后面想要“地址操作”,出错了。

改成这样后就成功了:
char str[]="abcde";
func(str);

================================
同时,因为  数组参数 是以地址作为传递的 ,所以在递归时不像 func(int x) 那样
可以在各自的层次中保留自己的值。
测试代码

#include <stdio.h>
int main(void)
{
   void func(char str[],int nstr);
   char str[5]="abcd";
   func(str,4);
   return 0;
}


void func(char str[],int nstr)
{
  int i;
  printf("%s,nstr=%d\n",str,nstr);
  if (nstr>1) {
    str[nstr-1]=0;
    func(str,nstr-1);
  }
  printf("%s,nstr=%d\n",str,nstr);
}

==========以下是显示结果============

abcd,nstr=4
abc,nstr=3
ab,nstr=2
a,nstr=1
a,nstr=1
a,nstr=2
a,nstr=3
a,nstr=4
==================================
int型的 nstr 在返回的时候每个层次有各自的记录
而字符串数组型的在返回的时候始终是最后的结果 "a"
跳转到指定楼层
快速回复 返回顶部 返回列表