如何更改作为参数传递的变量的值?

如何更改作为参数传递的变量的值?

如何更改C中作为参数传递的变量的值?我试过这个:

void foo(char *foo, int baa){
    if(baa) {
        foo = "ab";
    } else {
        foo = "cb";
    }}

然后打电话:

char *x = "baa";foo(x, 1);printf("%s\n", x);

但它印出来了baa为什么?提前谢谢。


MYYA
浏览 720回答 3
3回答

不负相思意

你想改变char*因此,您需要接受foo()带着再往前看a;achar**(指向char指针)。因此foo()将改写为:void foo(char **foo /* changed */, int baa){    if(baa)     {       *foo = "ab"; /* changed */    }    else     {       *foo = "cb"; /* changed */    }}现在打电话的时候foo(),你会通过一个指向x使用地址-of操作符(&):foo(&x, 1);不正确的片段打印的原因baa是因为您只是简单地将一个新值分配给本土化变量char *foo,这与x..因此,其价值x从未修改过。

梵蒂冈之花

有许多问题:void foo(char *foo, int baa){     if (baa)          foo = "ab";     else          foo = "cb";}此代码更改本地指针,但对其不做任何操作。若要复制字符串,需要使用strcpy()若要保持接口相同,请执行以下操作:void foo(char *foo, int baa){     if (baa)          strcpy(foo, "ab");     else          strcpy(foo, "cb");}但是,在这样做之前,您需要确保foo在可修改内存的功能点上。需要修改调用代码,以确保:char x[] = "baa";foo(x, 1);printf("%s\n", x);或者,你可以x作为指针并修改函数接口:void foo(char **foo, int baa){     if (baa)          *foo = "ab";     else          *foo = "cb";}呼叫顺序:char *x = "baa";foo(&x, 1);printf("%s\n", x);这两种机制都起作用,但其方式不同。每个问题都有不同的问题。没有一个‘这比那个更好’的决定;这更好地取决于所显示的代码片段范围之外的环境。

慕标5832272

你的问题是以一种通用的方式命名的。你已经为你的具体问题找到了答案。我将为int和double类型。#include&nbsp;<stdio.h>void&nbsp;incrementInt(int*&nbsp;in,&nbsp;int&nbsp;inc){ &nbsp;&nbsp;&nbsp;*in&nbsp;+=&nbsp;inc;}void&nbsp;incrementDouble(double*&nbsp;in,&nbsp;double&nbsp;inc){ &nbsp;&nbsp;&nbsp;*in&nbsp;+=&nbsp;inc;}int&nbsp;main(){ &nbsp;&nbsp;&nbsp;int&nbsp;i&nbsp;=&nbsp;10; &nbsp;&nbsp;&nbsp;double&nbsp;d&nbsp;=&nbsp;10.2; &nbsp;&nbsp;&nbsp;printf("i:&nbsp;%d,&nbsp;d:&nbsp;%lf\n",&nbsp;i,&nbsp;d); &nbsp;&nbsp;&nbsp;incrementInt(&i,&nbsp;20); &nbsp;&nbsp;&nbsp;incrementDouble(&d,&nbsp;9.7); &nbsp;&nbsp;&nbsp;printf("i:&nbsp;%d,&nbsp;d:&nbsp;%lf\n",&nbsp;i,&nbsp;d);}产出:i:&nbsp;10,&nbsp;d:&nbsp;10.200000 i:&nbsp;30,&nbsp;d:&nbsp;19.900000
打开App,查看更多内容
随时随地看视频慕课网APP