如何在C中的函数中增加1D数组的元素

如何在C中的函数中增加1D数组的元素,c,C,如果你看我在下面生成的函数,(强度)我想用指针增加强度直方图的元素,所以*(指针+1)+意味着i打算增加array\u直方图的元素1,但是程序不允许我这样做,会形成错误,因此,我的代码不允许我编译,错误ar在每个指针增量,请帮助 #include <stdio.h> #include <stdlib.h> int mean_func (int array[16]); void intensity(int array[16], int *pointer); int m

如果你看我在下面生成的函数,(强度)我想用指针增加强度直方图的元素,所以
*(指针+1)+
意味着
i
打算增加
array\u直方图的元素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 */
#包括
#包括
int-mean_-func(int数组[16]);
空洞强度(int数组[16],int*指针);
int main()
{
[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-intensity_直方图[7];
对于(i=0;i尝试使用
(指针[1])++
而不是
*(指针+1)+

*(指针+1)+
相当于
*((指针+1)+)+
,而不是
(*(指针+1))++

因此,这里的增量应用于
(指针+1)
,而
(指针+1)
不是左值

(指针+1)
的结果是一个右值(不是左值),因此您不能给它赋值
强度(pix\u out,强度\u直方图);
-->传递给函数的参数无效

因为在这个函数中
空洞强度(int数组[16],int*指针);
-->在这个函数中,您可以声明为int指针

所以你把一个论点当作
强度(像素输出和强度直方图);

这可能有用

享受你的编码

    (*(pointer+i))++;

指针[i]++


这就是关联性的问题

,尽管其他人提供了正确的解决方案,即代替
*(指针+1)++;

(*(pointer+1))++;

我想指出错误:

递增运算符
++
优先于解引用运算符
*
。因此,
*(指针+1)的顺序++
首先计算
指针+1
,然后将其结果应用于递增运算符。这是不可能的,因为
指针+1
是一个临时值,没有存储,它是no
左值
。递增它没有意义,是一个语法错误

应用方括号,使取消引用发生在增量之前,会生成正确的代码,因为取消引用的指针是内存中的实际变量

代码还有另一个问题,您可能知道也可能不知道。由于缺少缩进,这一问题并不明显,但您正在执行行
mean=mean\u func(pix\u out);
16次。这似乎是意外的

此外,所有
if…else if…
结构也可以压缩为:

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

if(array[i]>=0&&array[i]
intensity\u直方图
声明为数组,因此,如果省略
[]
,则作为指向第一个元素的指针进行处理。这没有错。(*(pointer+i))++;*(pointer+i)++;二者之间的区别是,在第一次取消引用时,先发生,然后值递增,而在第二次取消引用时,由于优先级问题,增量在取消引用之前完成。如果要先取消引用,最好先将此差异关联起来,将其括在括号中,以便无论如何,取消引用将在增量之前首先发生手术。
if(array[i] >= 0 && array[i] <= 7)
    pointer[array[i]]++;