gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:02 24 4
gpt4 key购买 nike

如果您查看我在下面生成的函数,(强度)我想使用指针增加 intensity_histogram 的那个元素,所以 *(pointer+1)++ 表示 i 打算递增 array_histogram 的元素 1,但是程序不允许我这样做,形成了错误,因此我的代码不允许我编译,每次指针递增时都会出现错误,请帮忙

#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 */

最佳答案

虽然其他人提供了问题的正确解决方案,即代替*(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]]++;

关于c - 我如何在 C 函数中递增一维数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20834758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com