[英]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.