我本周开始学习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;
}
}