2015-12-06 45 views
1
#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(); 
} 

我不知道为什么会出现这个错误。我如何解决它?将整数与指针数组中的元素相乘C

回答

2
int *parray; 
*parray=&array; 

1.parrayint *类型和下一行的时取消引用它(未定义的行为,因为它是未初始化的)变型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); 
3
  1. 此行

    *parray=&array; 
    

    不确定的行为因为parray尚未初始化。取消引用它将指向不确定的内存位置
    使用

    parray = array; 
    

    代替。也请阅读the difference between array and &array

  2. 这种表达

    *(parray[i] * 2) 
    

    使你的编译错误。将下标运算符应用于int*parray)产生int。乘以2再次产生一个int。现在您尝试解除引用intint无指针,所以它不能被取消

    格式说明符%d%d预计两个int s。您只提供一个,所以这是再次未定义的行为。一个简单的%d就足够了。

    所有后,改变

    printf("%d%d",*(parray[i]*2)); 
    

    printf("%d", parray[i] * 2);