#include <stdio.h>
void main()
{
int array[5]={1,2,3,4,5};
int *parray;
*parray=&array;
int i;
for(i=0;i<5;i++)
{
printf("%d%d",*(parray[i]*2));// [Error] invalid type argument of unary '*' (have 'int')
}
getch();
}
我不知道为什么会出现这个错误。我该如何解决?
答案 0 :(得分:3)
这一行
*parray=&array;
是未定义的行为,因为parray
尚未初始化。取消引用它将指向不确定的内存位置
使用
parray = array;
此表达式
*(parray[i] * 2)
导致编译错误。将下标运算符应用于int*
(parray
)会产生int
。乘以2
会再次产生int
。现在,您尝试取消引用int
。 int
无指针,因此无法取消引用。
格式说明符%d%d
需要两个 int
。您只提供一个,因此这又是未定义的行为。一个简单的%d
就足够了。
毕竟,请更改
printf("%d%d",*(parray[i]*2));
到
printf("%d", parray[i] * 2);
答案 1 :(得分:2)
int *parray;
*parray=&array;
1。 parray
的类型为int *
,当您取消引用它时(未定义的行为,因为它未初始化)将成为类型您尝试为其分配数组地址的int
。只是做 -
parray=array;
2。在这一行 -
printf("%d%d",*(parray[i]*2)); //gave 2 specifiers but pass one argument ??
您使用2个格式说明符,但只传递一个参数且类型错误。
当您编写parray[i]
时,它意味着*(parray+i)
,您无需使用*
进一步取消引用它,因为它已经是int
类型(和您尝试取消引用 int
变量)。
写这个就行了 -
printf("%d",parray[i]*2);