首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个基础有关问题

2012-03-02 
一个基础问题charstr[] asdf char*fun(char*str){str++returnstr}voidmain(){char*str1fun(str)pr

一个基础问题
char   str[]= "asdf ";

char*   fun(char*   str)
{
        str++;
        return   str;
}
void   main()
{
        char*   str1=fun(str);
        printf( "%s ",str1);
        getch();
}

str[]是个数组,不能自加,但是传入函数fun()后,就可以自加了,我知道以char*   str这种格式是可以实现自加的,但是它实参是数组啊,这个到底是什么关系呢,形参是实参的拷贝,那么实参做的操作与形参作的操作不一样吗?头有点搞晕了,请哪位大虾解释下?

[解决办法]
编译器总是要为函数的每个参数制作临时副本,指针参数str的副本是 _str,编译器使 _str = str。如果函数体内的程序修改了_str的内容,就导致参数str的内容作相应的修改。这就是指针可以用作输出参数的原因。

char str[]= "asdf ";
char* fun(char* str)
{
str++;//这里改变的是副本 _str的地址,而str的地址没有被改变
return str;
}
void main()
{
char* str1=fun(str);
printf( "%s\n ",str1);//输出sdf
printf( "%s\n ",str);//输出asdf
getch();
}

热点排行