带有指针参数 C 的测试函数

Testing function with pointer parameter 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);

}

我能做什么?谢谢!

您在函数中声明了 int *tmp。这是一个指向可以存储 int 的 int 大小的内存位的指针。但是,您永远不会将它指向任何地方,因此 *tmp = *a % *b; 将执行 a 和 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;
    } 
}

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

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

main

中的这些声明
int *a;
int *b;

这些都说不通。

你的意思如下。

#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 %d\n", a, b );

    return 0;
}

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