【问题标题】:invalid type argument of ‘unary *’ (have ‘int’)“一元*”的无效类型参数(有“int”)
【发布时间】:2014-05-26 13:03:17
【问题描述】:

我很抱歉重复这个问题,但我无法理解(我认为我的问题是什么)指针。有人可以为我解释一下吗?我已经浏览了一堆 stackoverflow 问题、c 教程和它最令人困惑的问题,因为每个解决方案似乎都相互矛盾 - 如果我看到我的代码被修复,我相信这将有助于我完全理解

1 #include <stdio.h>
2 getinput()
3 {
4 int *employeeSalary[5];
5 int i;
6         for(i=0;i<5;i++)
7         {
8                 printf("Enter details of employee no. %d :",i+1);
9                 scanf("%d",&employeeSalary[i]);
10         }
11 return(*employeeSalary);
12 }
13 
14 int payrise(int *employeeSalary[])
15 {
16 int *newSalary = ((employeeSalary*0.20)*100);
17 return(*newSalary);
18 }
19 
20 int highestSalary(int *newSalary)
21 {
22 int i = 0;
23 int biggestSalary;
24 int element;
25         if(newSalary[i] >= newSalary[i])
26         {
27                 biggestSalary = newSalary[i];
28                 element = i;
29         }
30 return(biggestSalary, element);
31 }
32 
33 void display(int *employeeSalary, int *newSalary, int biggestSalary, int element)
34 {
35 printf("The old salary was %d and the new one is %d ", employeeSalary, newSalary);
36 printf("The biggest salaray is %d in element %d", biggestSalary, element);
37 }
38 
39 
40 int main()
41 {
42 int initialSalary = getinput();
43 int payIncrease = payrise(initialSalary);
44 int largestSalary = highestSalary(payIncrease);
45 display(initialSalary, payIncrease, largestSalary);
46 return(0);
47 }

这些是我遇到的错误

11: error: invalid type argument of ‘unary *’ (have ‘int’)
16: error: invalid operands to binary * (have ‘int ***’ and ‘double’) 
17: error: invalid type argument of ‘unary *’ (have ‘int’)
45: error: too few arguments to function ‘display’

【问题讨论】:

  • 这只是一堆指针错误。例如:第 4 行 employeeSalary 是指向 int 的指针数组。因此getinput() 的返回类型应该是int*
  • 正如您的编译器报告的那样,您不能这样做16 int *newSalary = ((employeeSalary*0.20)*100);
  • int initialSalary = getinput(); 再次 getinput() 返回一个指针。所以 initialSalary 应该是 int* 。但是,我看不到,为什么您对每个变量都使用指针...
  • 感谢您的帮助@hhachem

标签: c arrays function pointers


【解决方案1】:

在第 2 行,您有一个看起来像没有返回类型的函数声明,请尝试添加一个。

【讨论】:

  • 这是一个错误,但它只是众多错误之一。如果您不打算解决其他一些问题,您最好发表评论而不是答案。
【解决方案2】:

主要是打字问题 @lijat 说的是正确的。在第 16 行,你有一个没有不同类型转换的作业。 ((employeeSalary*0.20)*100) 是 int [] 类型,实际上是 int* 所以你要么需要左侧 int** 要么再取消引用右侧(在开头添加 *表达方式。 第 17 行返回后需要一个空格。 第 45 行你缺少一个参数,函数 display 收到 4 而你只给了它 3。

【讨论】:

  • 太好了,谢谢@inneedofhelp,我只是坚持'第 45 行你缺少一个参数,函数显示收到 4 而你只给了它 3' 有没有办法我可以返回 2 东西一个函数并将它们传递给另一个函数,还是我必须将它们拆分?
  • 您可以将输出参数作为指针/引用发送,并在该参数中返回输出。
  • 太棒了 - 非常感谢您的帮助
【解决方案3】:

您使用的指针都错了。请在尝试使用指针之前阅读指针。我会尽量指出你的错误:

2 getinput() //<-- no return type? should return int*
3 {
4 int *employeeSalary[5];
5 int i;
6         for(i=0;i<5;i++)
7         {
8                 printf("Enter details of employee no. %d :",i+1);
9                 scanf("%d",&employeeSalary[i]);
10         }
11 return(*employeeSalary); //<-- I guess you wanted to return the whole array. This only returns the 1st element
12 }




14 int payrise(int *employeeSalary[])//<-- must return an integer
15 {
16 int *newSalary = ((employeeSalary*0.20)*100); <-- employeeSalary is an array of int pointers, therefore this is invalid
17 return(*newSalary); 
18 }




20 int highestSalary(int *newSalary) //<-- must return an integer like 5 or 3 ...
21 {
22 int i = 0;
23 int biggestSalary;
24 int element;
25         if(newSalary[i] >= newSalary[i]) //<-- isn't this always true, i.e. always equal?
26         {
27                 biggestSalary = newSalary[i];
28                 element = i;
29         }
30 return(biggestSalary, element); //<-- no comment! I don't know what you are trying to do here
31 }


void display(int *employeeSalary, int *newSalary, int biggestSalary, int element)
34 {
35 printf("The old salary was %d and the new one is %d ", employeeSalary, newSalary);//employeeSlary and newSalary are pointersn you need to dereference them.
36 printf("The biggest salaray is %d in element %d", biggestSalary, element);
37 }

我强烈建议您在线查找 c 教程并按照它进行操作。您似乎无法区分变量类型和指针。

【讨论】:

    【解决方案4】:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define NUM_OF_EMPLOYEE 5
    
    int *getinput(void){
        int i, *employeeSalary = calloc(NUM_OF_EMPLOYEE, sizeof(int));
        for(i=0;i<NUM_OF_EMPLOYEE;++i){
            printf("Enter details of employee no. %d :", i+1);
            scanf("%d", &employeeSalary[i]);
        }
        return employeeSalary;
    }
    
    int *payrise(int employeeSalary[]){
        int i, *newSalary = malloc(NUM_OF_EMPLOYEE * sizeof(int));
        for(i=0;i<NUM_OF_EMPLOYEE;++i){
            newSalary[i] = employeeSalary[i]*1.20;//*0.20*100 = *20.0
        }
        return newSalary;
    }
    
    int highestSalary(int *newSalary){
        int biggestSalary = newSalary[0];
        int element = 0;
        int i = 0;
    
        for(i=1;i<NUM_OF_EMPLOYEE;++i){
            if(newSalary[i] > biggestSalary){
                biggestSalary = newSalary[i];
                element = i;
            }
        }
        return element;
    }
    
    void display(int *employeeSalary, int *newSalary, int biggestSalary, int element){
        int i;
        for(i=0;i<NUM_OF_EMPLOYEE;++i){
            printf("The old salary was %d and the new one is %d\n", employeeSalary[i], newSalary[i]);
        }
        printf("The biggest salaray is %d in element %d\n", biggestSalary, element);
    }
    
    int main(){
        int *initialSalary = getinput();
        int *payIncrease = payrise(initialSalary);
        int index = highestSalary(payIncrease);
        int largestSalary = payIncrease[index];
        display(initialSalary, payIncrease, largestSalary, index);
    
        free(initialSalary);free(payIncrease);
        return 0;
    }
    

    【讨论】:

    • -1 请不要在没有解释的情况下发布代码转储。这个答案对除了 OP 之外的任何人都没有用,即使对那个人来说,它也不能帮助他们理解,它只是让他们继续通过复制和粘贴来编写代码。
    • @siride 非常正确,但绝对可以帮助我
    • @dazza2608:这个网站不是一个“请帮我修复我的代码”的网站,所以它不会飞。它实际上也对你没有帮助。你真的明白哪里错了吗?如果没有,那么您并没有真正得到帮助。
    • @siride 我知道它不是一个“请为我修复我的代码”网站,BLUEPIXY 确实修复了我的代码,并且从中我可以看到我需要做什么 - 我现在可以看到我的指针在哪里哪里磨损了,我需要动态分配内存并通过获取百分比对我的问题进行排序,以便我现在可以在未来使用所有这些。我完全理解对于社区来说这不是一个好的答案,但对我来说这正是我所需要的
    猜你喜欢
    • 2021-10-15
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多