簡體   English   中英

帶有指針參數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的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范圍內聲明該變量。

這些聲明主要

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

    return 0;
}

ft_ultimate_div_mod函數通過引用將其參數ft_ultimate_div_mod ,因為它試圖更改其原始值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM