2017-02-17 57 views
0

我的问题是,当我在函数中创建一个本地数组并返回它时,数组中的所有值都被分配给数组的第一个值。因此,例如,返回值为3,5,11,13的大小为4的数组。该数组现在只有值3,3,3,3.我是相当新的编码,所以任何帮助,将不胜感激。C - 返回的数组只填充第一个数组

uint8_t* half(const uint8_t array[], 
      unsigned int cols, 
      unsigned int rows) 
{ 

    int size = (cols/2) * (rows/2); 

    uint8_t *newarray = malloc(size * sizeof(int)); 

    float average; 

    for (int i = 0; i < (rows/2); i++) { 

     for (int k = 0; k < (cols/2); k++) { 

      average = (array[ (2*k) + (2*i*cols) ] + array[ ((2*k) + 1) + (2*i*cols) ] + array[ ((2*k) + 1) + ((2*i*cols) + cols) ] + array[ (2*k) + ((2*i*cols) + cols) ])/4.0; 

      newarray[k + (i * (cols/2))] = (int)(round(average)); 

     } 
    } 

    return newarray; 

} 


int main() { 

    uint8_t *halfarray; 

    halfarray = half(testarray, test_width, test_height); 

    for (int i = 0; i < 4; i++) { 

     printf("values in array %d\n", *halfarray); 

    } 

    return 0; 
} 
+2

您只打印第一个元素。 'printf(“array%d \ n”,* halfarray);' - >'printf(“value%d \ n”,halfarray [i]);' – kaylum

+0

哦,这是有道理的。 – Daniel

+0

好吧,它的工作原理,谢谢大声笑。 – Daniel

回答

0

尝试改变这一行:

printf("values in array %d\n", *halfarray); 

这样:

printf("values in array %d\n", *halfarray); 
halfarray++ 
+0

这很糟糕,因为为了释放内存,在回路之后''halfarray'将不得不再次减少。 – kaylum

+1

你刚刚抄袭了一条评论吗? –

+0

@AdrianM。 Bwa哈哈哈是的,我做到了! – kaylum

0

使用指针运算在每次迭代递增非恒定指针的位置,正是如此:

for (int i = 0; i < 4; i++, halfarray++) { 

    printf("values in array %d\n", *halfarray); 

} 
+2

这很糟糕,因为为了释放内存,'halfarray'只会在循环后再次减少 –