当前位置: 首页 > 知识库问答 >
问题:

改变值在主使用空子函数

胡光霁
2023-03-14

我遇到了这个问题:

#include <stdio.h>
void change_number(int *x);

int main()
{
   int x;
   printf("Enter the number x: ")
   scanf("%d", &x);
   printf("In the main program: x = %d\n", x);
   change_number(&x);
   printf("In the main program: x = %d\n", x);
   return 0;
}
void change_number(int *x)
{
   x = *x+3;
   printf("In the subroutine: x = %d\n", x);
}

预期产出:

Enter the number x: 555
In the main program: x = 555
In the subroutine: x = 558
In the main program: x = 558

注二:

>

  • 我不能修改main或它之前的任何内容。我只能修改void change\u number函数,其中的代码是我自己的代码。

    我无法获得所需的输出–我的代码只在子程序中输出x3,但在主程序中不更改它。

    我如何更改主例程中的值?请记住,我是C语言的新手,还不知道很多事情(事实上,我昨天刚刚讨论了指针)。

  • 共有3个答案

    百里秋月
    2023-03-14

    你应该用

    *x = *x+3;
    

    而不是

    x = *x + 3; 
    
    厍浩广
    2023-03-14

    我认为OP问题的答案需要一点解释,因为C语法有时可能会令人困惑:

    函数声明为

    void change_number(int *x)
    

    *表示输入参数x是指向int类型变量的指针。换句话说,x表示内存中的一个位置。

    在函数内部:

    xint值在内存中的地址

    *xx

    因此,正如其他人正确指出的那样,函数应该写成

    void change_number(int *x)
    {
       *x = *x+3;
       printf("In the subroutine: x = %d\n", *x);
    }
    

    因为当你对*x采取行动时,你是在对x

    main()中发生了什么?

    x是一个int变量。

    你打电话:

    change_number(&x);
    

    安培数和

    相反,您将传递一个指向x的指针,换句话说,就是内存中存储x内容的地址。

    换句话说,x通过引用传递。

    最后一个注意事项:当用c语言编写程序时(当然,在任何语言中,尤其是在c语言中),编译器警告/错误和调试器是你最好的朋友。

    此外,一个好的IDE会在您键入代码时向您显示警告。

    无论如何编译器应该警告您

    x = *x+3;
    

    涉及从intint*(指向int的指针)的隐式转换,很可能是错误的。

    南门峰
    2023-03-14

    代码

    void change_number(int *x)
    {
       x = *x+3;
       printf("In the subroutine: x = %d\n", x);
    }
    

    应该读

    void change_number(int *x)
    {
       *x = *x+3;
       printf("In the subroutine: *x = %d\n", *x);
    }
    

    这将按照预期使用指针(您也需要在LHS上取消引用它们)

     类似资料:
    • 在那个网站上,我读到Haskell前奏曲中的函数类型实际上是一个内函数。(以上类别中的c类和d类均为Hask) 通读了这一页后,我在想。如果Haskell使用实函数而不仅仅是内函数,它是否更适合于元编程? 假设我们有以下内容(Js代表Javascript)

    • 假设我有2个无符号数字,每个32位,保存在一个数组中。第一个数字包含在位置 [0; 3] 中,第二个数字包含在位置 [4; 8] 中。我现在要更改其中一个数字的值,以下代码是否允许/有问题?

    • 我想创建一个函数来检查数据库中是否已存在用户。该函数存储在名为 checks 的 php 文件中并且必须返回一个值。 我的数据库.php文件: 我在另一个名为 的 php 文件中调用 错误出现在这个句子上:$sth=$con- 我在< code>checks.php文件中试过: < li >将代码从< code>database.php移动到checks.php < li >设置< code >错

    • 我做了4个按钮。每个按钮都可以使用something.changetoTheme(this,something.black)将背景颜色更改为不同的颜色;它工作得很好,但在我关闭应用程序并重新启动后,主题总是设置为默认。有没有办法保存上一个会话的背景,并在重新打开应用程序时查看它?

    • 问题内容: 由于无法控制的原因,我需要连接两个表,并且需要空值来进行匹配。我能想到的最好的选择是吐出一个UUID并将其用作我的比较值,但这看起来很难看 我该如何做得更好?如果重要的话,这是在Oracle上进行的,并且上下文是一个应用程序,在该应用程序中必须将一批用户上载的数据与一批现有数据进行比较,以查看是否有任何行匹配。回想起来,我们应该阻止任何一个数据集中的连接列包含空值,但是我们没有,现在必

    • (免责声明:人们通过facebook、firebase等请求询问使用异步操作时数据为空/不正确时,会产生很多问题。我提出这个问题的目的是为每个从android异步操作开始的人提供一个简单的答案。) 我试图从我的一个操作中获取数据,当我使用断点或日志调试它时,值就在那里,但当我运行它时,它们总是空的,我该如何解决这个问题呢? 火力基地 脸书 等。