声明* a [i] ++ / = K有效吗?

时间:2014-02-19 17:18:26

标签: c arrays pointers multidimensional-array

数组初始化代码:

int m = 100;
int n = 50;
int i = 0, j = 0;

float **a = (float**)malloc(m*sizeof(float*));

for (i = 0; i < m; i++)
{
    a[i] = (float*)malloc(n*sizeof(float));
    for (j = 0; j < n; j++)
        a[i][j] = i + j;
}

a是一个2D数组,我想遍历并更新一维数组的元素a[0]

假设我想将[0]的所有元素除以2:

for (i = 0; i < n; i++)
    *a[0]++ /= 2; //  instead of a[0][i] /= 2;

这似乎不起作用..

2 个答案:

答案 0 :(得分:1)

是的,虽然它看起来像是一个功课。如果你想要更多有趣的代码,你可以在没有空格的情况下编写它,如*a[i]++/=K,最后你可以将它附加到包含循环,例如while(p=a[i]++)*p/=K;以使事情更加压缩。 ; - )

答案 1 :(得分:1)

我猜a是一个二维数组,如int a[10][20],然后给定的语句a[i]++是&#34; invalid&#34;。

原因是因为a [i]是一个数组a [i]是一个不可修改的“左值”。

在上述情况下,*a[i]有效,但不是a[i]++