带有指针参数 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
通过引用排除其参数,因为它试图更改其原始值。
我这周开始学习 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
通过引用排除其参数,因为它试图更改其原始值。