#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);
}
Errors: "initialization makes integer from pointer without a cast [-Wint-conversion]" and "invalid type argument of unary '*' (have 'int')". First error is shown twice for the initialisation of variables above. Second error is shown for each print statement.
I'm not sure what is going wrong, anyone know how I can fix this?
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("%d\n", *(p+3));
printf("%d\n", *(q-3));
printf("%d\n", *q-*p);
printf("%d\n", *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];
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];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With