使用指针参数 C 的测试函数



我本周开始学习C,这是我遇到的第一个指针困难。

我想测试这个函数:

void    ft_ultimate_div_mod(int *a, int *b)
    {
        int *tmp;
        if (b != 0)
        {
            *tmp = *a % *b;
            *a = *a / *b;
            *b = *tmp;
        } 
}

但是我无法弄清楚主要的使用指针。我的程序没有打印任何内容:

int     main(void)
{
    int *a;
    int *b;
    *a = 5;
    *b = 3;
    ft_ultimate_div_mod(a, b);
    printf("%d", *a);
    printf("%d", *b);
    return (0);

}

我能做什么?谢谢!

对于初学者来说,将变量tmp声明为具有类型int *是没有意义的。该变量用于存储类型为 int 的对象,因此它必须具有 int 类型。否则,您将使用具有不确定值的未初始化指针,从而导致程序的行为未定义。

此外,由于变量用于 if 语句的复合语句中,因此应在 if 语句的 blco 范围内声明。

这些声明在主要

int *a;
int *b;

ALS没有意义。

你的意思如下。

#include <stdio.h>
void    ft_ultimate_div_mod(int *a, int *b)
{
    if ( *b != 0 )
    {
        int tmp = *a % *b;
        *a = *a / *b;
        *b = tmp;
    } 
}
int main(void) 
{
    int a = 10;
    int b = 3;
    ft_ultimate_div_mod( &a, &b );
    printf( "%d %dn", a, b );
    return 0;
}

该函数ft_ultimate_div_mod通过引用排除其参数,因为它尝试更改其原始值。

你在函数中声明 int *tmp。这是一个指向可以存储 int 的 int 大小的内存位的指针。但是,您永远不会将其指向任何地方*tmp = *a % *b;因此它将执行一个 b 的 mod,然后在使用未初始化的指针存储它时崩溃。

*tmp更改为 tmp,这样您的代码将变为:

void ft_ultimate_div_mod(int *a, int *b)
{
    int tmp;
    if (a && b)
    {
        tmp = *a % *b;
        *a = *a / *b;
        *b = tmp;
    } 
}

相关内容

  • 没有找到相关文章

最新更新