C 函数未修改字符数组
我刚开始学习指针,我正试图找出我的代码不起作用的原因。我没有得到编译错误,但代码并不是我想要它做的。为什么我没有传递数组的地址?如果我尝试这样做,我会得到一个编译错误:(C 函数未修改字符数组,c,parameter-passing,C,Parameter Passing,我刚开始学习指针,我正试图找出我的代码不起作用的原因。我没有得到编译错误,但代码并不是我想要它做的。为什么我没有传递数组的地址?如果我尝试这样做,我会得到一个编译错误:( #包括 无效开关名称(字符*名称) { name=“testv2”; } void main() { char*name1=“测试名称”; printf(“%s\n”,名称1); 开关名称(名称1); printf(“%s\n”,名称1); } 因为C是按值传递的。您可以对局部变量(name在函数switch_name()中)
#包括
无效开关名称(字符*名称)
{
name=“testv2”;
}
void main()
{
char*name1=“测试名称”;
printf(“%s\n”,名称1);
开关名称(名称1);
printf(“%s\n”,名称1);
}
因为C
是按值传递的。您可以对局部变量(name
在函数switch_name()
中)进行更改。要保留更改,请传递char*
的地址,并直接将字符串文本的地址分配给char*
(通过取消引用char**
).例如,这将起作用
#include <stdio.h>
void switch_name(char** name)
{
*name= "testv2";
}
int main(void)
{
char *name1 = "test_name";
printf("%s\n", name1);
switch_name(&name1);
printf("%s\n", name1);
return 0;
}
#包括
无效开关名称(字符**名称)
{
*name=“testv2”;
}
内部主(空)
{
char*name1=“测试名称”;
printf(“%s\n”,名称1);
开关名称(&name1);
printf(“%s\n”,名称1);
返回0;
}
在这里,函数
switch_name
获得了char*
name1
的地址。现在,当您在switch_name
中使用一元*
解除对它的引用时,您将字符串文本的地址分配给main()的name
变量
。这就是更改保留的原因。函数参数是其局部变量
您可以按照以下方式想象函数调用及其定义
char *name1 = "test_name";
switch_name(name1);
//...
void switch_name( /* char* name */ )
{
char *name = name1;
name= "testv2";
}
如您所见,函数中未更改原始变量name1
。函数中更改的参数是变量name
如果要在函数中更改原始变量,则必须通过引用传递它
比如说
#include <stdio.h>
void switch_name( char ** name)
{
*name= "testv2";
}
int main( void )
{
char *name1 = "test_name";
printf("%s\n", name1);
switch_name( &name1 );
printf("%s\n", name1);
}
推荐阅读:“为什么我的代码不起作用”-->代码起作用。“但代码不符合我的要求”-->您希望代码做什么?
#include <stdio.h>
void switch_name( char ** name)
{
*name= "testv2";
}
int main( void )
{
char *name1 = "test_name";
printf("%s\n", name1);
switch_name( &name1 );
printf("%s\n", name1);
}
#include <stdio.h>
#include <string.h>
void switch_name( char* name )
{
strcpy( name, "testv2" );
}
int main(void)
{
char s[] = "test_name";
char *name1 = s;
printf( "%s\n", name1 );
switch_name( name1 );
printf( "%s\n", name1 );
return 0;
}
int main( void )