微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误需要类型为‘int’的参数,但参数 3 的类型为‘int *’

如何解决错误需要类型为‘int’的参数,但参数 3 的类型为‘int *’

我正在尝试将每个值的地址编译并显示到数组中。


int i[10] = {1,2,3,4,5,6,7,8,9,10},x;
float f[10] = {1,10};
double d[10] = {1,10};

/*int *p_i = &i;                                                             
                                                                             
float *p_f = &f;                                                             
                                                                             
double *p_d = &d;*/

int main(void){
  printf("\n\tInteger\tFloat\tDouble");
  printf("\n=======================================");

  /* loop to show the address in each element that have the arrayes */
  for(x = 0; x < 10; x++){
    printf("\nElement %d\t%d\t%d\t%d",x+1,&i[x],&f[x],&d[x]);
    // printf("\nElement %d\t%d\t%d\t%d",p_i++,p_f++,p_d++);         
  }
  printf("\n=======================================\n");
}

如果语法正确,我不明白为什么。我也有搜索,找到的代码几乎相同。

解决方法

您使用了错误的转换说明符。

当您提供指针类型的参数时,转换说明符 %d 需要 int 类型的参数。

代替

printf("\nElement %d\t%d\t%d\t%d",x+1,&i[x],&f[x],&d[x]);

printf( "\nElement %d\t%p\t%p\t%p",( void * )&i[x],( void * )&f[x],( void * )&d[x] );

printf( "\nElement %d\t%p\t%p\t%p",( void * )( i + x ),( void * )(f + x ),( void * )( d + x ) );

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。