Invalid type argument of unary * (have int) Error in C

Invalid type argument of unary * (have int) Error in C

You forgot to make p and q int pointers. Also, you forgot to use the format specifier in the printf statements. Try the following:

#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(%dn, *(p+3));
  printf(%dn, *(q-3));
  printf(%dn, *q-*p);
  printf(%dn, *p<*q);
  return (EXIT_SUCCESS);
}

&a[3] (or &a[5]) is a pointer type, i.e. int *.

p is defined as int.

So you need to define p and q as int *, like this:

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

Invalid type argument of unary * (have int) Error in C

The unary operator & yields the address of its operand. The type is of T *, not T. Therefore you cannot assign a int * to an int without a cast. The expression

&a[1]

yields the address of a[1].

I think you mean to define the variables as pointers to int, not just ints.

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

Leave a Reply

Your email address will not be published.