【问题标题】:Invalid type argument of unary '*' (have 'int') Error in C一元'*'的无效类型参数(有'int')C中的错误
【发布时间】:2017-03-18 14:26:34
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

/*
 * 
 */
int main() {

    int a[] = {5, 15, 34, 54, 14, 2, 52, 72};
    int p = &a[1];
    int q = &a[5]; 

    printf(*(p+3));
    printf(*(q-3));
    printf(*(q-p));
    printf(*p<*q);

    return (EXIT_SUCCESS);
}

错误:“初始化从没有强制转换 [-Wint-conversion] 的指针生成整数”和“一元 '*' 的无效类型参数(具有 'int')”。对于上述变量的初始化,第一个错误显示了两次。 每个打印语句都会显示第二个错误。

我不知道出了什么问题,有人知道我该如何解决这个问题吗?

【问题讨论】:

标签: c


【解决方案1】:

您忘记创建 pq int 指针。此外,您忘记在 printf 语句中使用格式说明符。请尝试以下操作:

#include <stdio.h>
#include <stdlib.h>

/*
* 
*/
int main() {
  int a[] = {5, 15, 34, 54, 14, 2, 52, 72};
  int *p = &a[1];
  int *q = &a[5];   

  printf("%d\n", *(p+3));
  printf("%d\n", *(q-3));
  printf("%d\n", *q-*p);
  printf("%d\n", *p<*q);
  return (EXIT_SUCCESS);
}

【讨论】:

    【解决方案2】:

    &amp;a[3](或&amp;a[5])是指针类型,即int *

    p 定义为int

    所以你需要将pq定义为int *,像这样:

    int * p = &a[1];
    int * q = &a[5];
    

    【讨论】:

      【解决方案3】:

      一元运算符&amp; 产生其操作数的地址。类型是T *,而不是T。因此,您不能在没有演员表的情况下将 int * 分配给 int。表达式

      &a[1]
      

      产生a[1]的地址。

      我认为您的意思是将变量定义为指向 int 的指针,而不仅仅是 int。

      int *p = &a[1];
      int *q = &a[5]; 
      

      【讨论】:

        猜你喜欢
        • 2018-01-20
        • 1970-01-01
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多