将整数与C中指针数组的元素相乘

时间:2015-12-06 11:26:03

标签: c

#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();
}

我不知道为什么会出现这个错误。我该如何解决?

2 个答案:

答案 0 :(得分: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。您只提供一个,因此这又是未定义的行为。一个简单的%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);