为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
MYYA 2019-07-09 16:07:04
如何更改作为参数传递的变量的值?如何更改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为什么?提前谢谢。
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

你想改变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从未修改过。


查看完整回答
反对 回复 2019-07-09
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

有许多问题:

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);

这两种机制都起作用,但其方式不同。每个问题都有不同的问题。没有一个‘这比那个更好’的决定;这更好地取决于所显示的代码片段范围之外的环境。


查看完整回答
反对 回复 2019-07-09
?
慕标5832272

TA贡献1966条经验 获得超4个赞

你的问题是以一种通用的方式命名的。你已经为你的具体问题找到了答案。我将为intdouble类型。

#include <stdio.h>void incrementInt(int* in, int inc){
   *in += inc;}void incrementDouble(double* in, double inc){
   *in += inc;}int main(){
   int i = 10;
   double d = 10.2;

   printf("i: %d, d: %lf\n", i, d);

   incrementInt(&i, 20);
   incrementDouble(&d, 9.7);

   printf("i: %d, d: %lf\n", i, d);}

产出:

i: 10, d: 10.200000
i: 30, d: 19.900000


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 718 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信