C语言中如果函数需要一个地址,结果少打了&符号,导致实参是一个整数,请问发生了什么导致函数进不去?
//函数定义:
void function(int *j)
{...}
//函数的实际调用:
int main{
...
function(i);
...
}
基于Monster 组和GPT的调写:
在调用方法时,找不到方法名为function,参数类型为int的方法、
调用方法时,找不到方法名为function且参数类型为int的方法
就会把整数值作为地址传进去,假如是非法地址就会异常,例如i=0x123,在函数中就会变成往0x123的位置写入,但是是非法地址,就异常。这种情况还好,要是有效地址就更危险
参考GPT和自己的思路,在 C 语言中,如果一个函数需要一个地址作为参数,但是实参提供的是一个整数,编译器会发出一个警告,但是程序会继续编译和执行。因此,在你的代码中,如果函数需要的是一个指针类型的参数,而实参是一个整数类型,编译器会将整数类型的实参隐式转换为指针类型,从而得到一个指针地址。但是,这个地址通常是无效的,因为它不是你想要的指针地址。
因此,当你在函数中使用这个参数时,会导致程序崩溃或者出现未定义的行为,因为指针指向的是无效的内存地址。解决这个问题的方法是,在函数调用时正确地使用 & 运算符来获取实参的地址,以便函数可以正确地使用指针参数。因此,正确的代码应该是:
//函数定义:
void function(int *j)
{...}
//函数的实际调用:
int main{
...
function(&i);
...
}
在这个代码中,& 运算符用于获取变量 i 的地址,并将该地址作为指针参数传递给函数。这样,函数就可以正确地使用指针参数,并避免程序崩溃或出现未定义的行为。
void function(int* j) 与 void function(int j) 系统认为是两个不同的函数,在调用时会自动匹配,供参考:
#include <stdio.h>
void function(int* j)
{
printf("%d\n", *j);
}
void function(int j)
{
printf("%d\n", j);
}
int main()
{
int i = 10;
function(&i);
function(i);
return 0;
}