簡體   English   中英

我如何在C函數中增加一維數組的元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM