如何在C函数中递增一维数组的元素

时间:2013-12-30 06:54:31

标签: c

如果你看下面我生成的函数,(强度)我想用指针增加intensity_histogram的元素,所以*(pointer+1)++意味着i打算增加array_histogram的元素1 ,但程序不允许我这样做,错误形成,因此我的代码不允许我编译,错误ar每个指针增量,请帮助

#include <stdio.h>
#include <stdlib.h>

int mean_func (int array[16]);

void intensity(int array[16], int *pointer);

int main()

{
int pix_in[4][4] = {{0,1,2,3},{4,5,6,7},{0,1,2,3},{4,5,6,7}};
int pix_out[16];
int i;
int j;
int n = 0;
int mean;
int intensity_histogram[7];
for(i =0;i <4; i++ )
{//open for
    for(j=0;j<4;j++)
    {//open second for

        pix_out[n] = pix_in[i][j];
        n++;
    }//close second for

}//close for
for(i = 0; i<16; i++)


mean = mean_func(pix_out);

intensity(pix_out, intensity_histogram);
for(i=0;i<8;i++)
printf("%d\n", intensity_histogram[i]);
return 0;
}
int mean_func (int array[16])
{
int sum = 0;
int i;
int j;
int average;
for(i = 0; i<16; i++)
{
    sum = sum + array[i];
}
average = sum/16;
return average;

}
void intensity (int array[16], int *pointer)
{//open intensity
int i;

for(i = 0 ; i<16;i ++)
{//open for

    if(array[i]== 0)
    {//open first if
    *pointer++;
    }//close first if
    else if( array[i]== 1)
    {
        *(pointer+1)++;
    }
    else if( array[i]== 2)
    {
    *(pointer + 2)++;   
    }
    else if( array[i]== 3)
    {
    *(pointer + 3)++;   
    }
    else if( array[i]== 4)
    {
    *(pointer + 4)++;   
    }
    else if( array[i]== 5)
    {
    *(pointer + 5)++;   
    }
    else if( array[i]== 6)
    {
    *(pointer + 6)++;   
    }
    else if( array[i]== 7)
    {
    *(pointer + 7)++;
    }
}//close for


}//close intensity */

4 个答案:

答案 0 :(得分:2)

尝试使用(pointer[1])++代替*(pointer+1)++

*(pointer+1)++相当于*((pointer+1)++),而不等同于(*(pointer+1))++

因此,此处的增量适用于(pointer+1)(pointer+1)不是左值

(pointer+1)的结果是右值(不是左值),因此您无法为其赋值

答案 1 :(得分:1)

    (*(pointer+i))++;

指针[I] ++;

这是关联性问题

答案 2 :(得分:1)

虽然其他人提供了正确的问题解决方案,而不是*(pointer+1)++;

(*(pointer+1))++;

pointer[1]++;

我想指出错误:

增量运算符++优先于解除引用运算符*。因此,*(pointer+1)++;的计算顺序是pointer+1,其结果随后应用于增量运算符。这是不可能的,因为pointer+1是一个无处存储的临时值,它不是lvalue。增加它没有任何意义,并且是语法错误。

应用括号,使得解除引用在增量之前发生,导致代码正确,因为解除引用的指针是内存中的实际变量。

该代码还有另一个您可能会或可能不会注意到的问题。由于缺少缩进并不明显,但是您执行了mean = mean_func(pix_out);行16次。这似乎是无意的。

此外,您的所有if ... else if ...构造都可以紧凑为:

if(array[i] >= 0 && array[i] <= 7)
    pointer[array[i]]++;

答案 3 :(得分:0)

intensity(pix_out, intensity_histogram); - &gt;传递给函数的无效参数

因为在这个功能 void intensity (int array[16], int *pointer);    - &GT;在此函数中,您将声明为int指针

所以你传递了一个参数 intensity(pix_out, &intensity_histogram);

这可能有效

享受您的编码。