"int" 类型的实参与 "int *" 类型的形参不兼容,怎么办

时间:2021-04-06 20:17:39
main(){
int input; int n; int *m;
int *imput;
n=0;
********中间是这几个变量的计算过程

m=&n;
imput=&input;
printf("%d %d", *m, *imput);
swap(*m, *imput);/*错误信息:"int" 类型的实参与 "int *" 类型的形参不兼容*/
printf("%d %d", *m, *imput);}

void swap(int *x, int *y)
{int temp;
temp=*x;
*x=*y;
*y=temp;}

怎么改?

6 个解决方案

#1



swap(m, imput);

已经是int*类型了,在加*就变成了int了

#2



swap(m, imput);/*错误信息:"int" 类型的实参与 "int *" 类型的形参不兼容*/

#3


那我就有问题了,主函数通过swap(,)传入分支函数的,到底是指针的值,还是指针的地址?

#4


#include <stdio.h>
#define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0)
char   *p1="1" ,*p2="2" ;
char    c1=1   , c2=2   ;
short   s1=1   , s2=2   ;
int     i1=1   , i2=2   ;
__int64 I1=1i64, I2=2i64;
float   f1=1.0f, f2=2.0f;
double  d1=1.0 , d2=2.0 ;
void main() {
    SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);
    SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);
    SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);
    SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);
    SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);
    SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);
    SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);

    SWAP(c1,c1);
    printf("%d\n",c1);
}
//char *         2,       1
//char           2,       1
//short          2,       1
//int            2,       1
//__int64     2,    1
//float          2,       1
//double        2,      1
//2

#5


swap的参数是int*类型的(指向整型数值的一个指针)
你就必须给int*类型的变量进去

你的m就是int*类型,你*m就是int类型了

所以主函数应该改成swap(m,imput)

#6


int *input;
int m;
int imput;

*input=imput;
swap(&m, &imput);

#1



swap(m, imput);

已经是int*类型了,在加*就变成了int了

#2



swap(m, imput);/*错误信息:"int" 类型的实参与 "int *" 类型的形参不兼容*/

#3


那我就有问题了,主函数通过swap(,)传入分支函数的,到底是指针的值,还是指针的地址?

#4


#include <stdio.h>
#define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0)
char   *p1="1" ,*p2="2" ;
char    c1=1   , c2=2   ;
short   s1=1   , s2=2   ;
int     i1=1   , i2=2   ;
__int64 I1=1i64, I2=2i64;
float   f1=1.0f, f2=2.0f;
double  d1=1.0 , d2=2.0 ;
void main() {
    SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);
    SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);
    SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);
    SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);
    SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);
    SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);
    SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);

    SWAP(c1,c1);
    printf("%d\n",c1);
}
//char *         2,       1
//char           2,       1
//short          2,       1
//int            2,       1
//__int64     2,    1
//float          2,       1
//double        2,      1
//2

#5


swap的参数是int*类型的(指向整型数值的一个指针)
你就必须给int*类型的变量进去

你的m就是int*类型,你*m就是int类型了

所以主函数应该改成swap(m,imput)

#6


int *input;
int m;
int imput;

*input=imput;
swap(&m, &imput);