![](/img/trans.png)
[英]How can I assign the elements of a row in a 2D array to a 1D array through a function in C (C11)?
[英]how can i increment an element of a 1D array in function in C
如果您看一下我在下面产生的函数,(强度)我想使用指针增加那个array_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)
并且(pointer+1)
不是左值
(pointer+1)
的结果是一个右值(不是左值),因此您不能为其分配值
(*(pointer+i))++;
要么
指针[i] ++;
这是关联性的问题
尽管其他人为该问题提供了正确的解决方案,即代替*(pointer+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]]++;
intensity(pix_out, intensity_histogram);
->传递给函数的参数无效
因为在此函数void intensity (int array[16], int *pointer);
->在此函数中,您声明为int指针
因此,您已将一个参数传递为intensity(pix_out, &intensity_histogram);
这可能有效
享受您的编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.