写了一函数, 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" |
|