C语言关于字符指针的问题?

来源:百度知道 编辑:UC知道 时间:2024/06/12 00:23:44
#include <stdio.h>
#include <string.h>
char *le(char *str)
{
//strcpy(str,str+1);
str=str+1;
return str;
}
int main(void)
{
char str[20]="hahadsf";
le(str);
printf("%s",str);
return 0;
}

在le函数中,为什么首地址加一后,对下面调用没任何影响,而用strcpy就可以影响到了?
我们不是都是对str地址进行操作么?为什么le里改变,而主函数却没改变?
这数组名,本身就是地址,怎么会是值传递?
要是值传值,我在形参随便改都不会改变实参的值,可为什么我用strcpy函数,实参的值就改变了呢?

在c语言里,参数传递有两种方式,一种直接把变量传进去(就是说,你在函数声明里的形参,在参数传递的时候,会被替换成实际的参数,这样子,你的操作会改变实际的参数),还有一种是值传递,这就是相当于,让你的形参等于实参,然后,对形参操作,这样子你就只是利用了实参的值,而不会修改实参。
你用指针传递参数,指针是通过拷贝实参指针的值传递进去的,并不是将实际的指针传递进去,所以不会修改到main函数里的指针。

strcpy(a,b) 函数是把b中的字符串复制到a中 他引起值的改变了
如果a[10] b[10]
则在strcpy中
while((*a++=*b++)!=0) NULL;