C语言08-数组II:数组传参、二维数组

泄露秘密 提交于 2020-01-13 17:35:21

二维数组

二维数组寻址公式

对于

type ary2D[M][N]

其ary2D[i][j]语速对应的地址是:
ary2D+(i×N+j)×sizeof(type)ary2D+(i\times N+j)\times sizeof(type)

char g_Data[6];

void SetElement23(int nRow, int nCol, char chValue)
{
 g_Data[nRow * 3 + nCol] = chValue;
}

void SetElemet32(int nRow, int nCol, char chValue)
{
 g_Data[nRow * 2 + nCol] = chValue;
}


int main(int argc, char* argv[])
{
 SetElement23(1, 2, 'a');
 SetElemet32(2, 0, 'b');
 return 0;
}

数组传参

预测以下代码结果(还需要看

void Fun(char chAry[30])
{
    printf("%d\r\n", sizeof(chAry));
}
int main(int argc, char* argv[])
{
    char chAry[30] = { 0 };
    printf("%d\r\n", sizeof(chAry));
    Fun(chAry);
    return 0;
}

当数组被当作参数传递时,其实传递的不是数组本身,而是数组的首地址。

void Fun(char chAry[30])
{
    chAry[1] = 5;
    //printf("%d\r\n", sizeof(chAry));
}
void FunNormal(char chValue)
{
    chValue = 'b';
    //printf("%d\r\n", sizeof(chValue));
}

int main(int argc, char* argv[])
{
    char chAry[128] = { 0 };
    //printf("%d\r\n", sizeof(chAry));
    char hello = 'a';
    FunNormal(hello);
    printf("%c\r\n", hello);
    Fun(chAry);
    printf("%d\r\n", chAry[1]);
    return 0;
}

数组传递过程,实际传递的是数组首地址,但会有影响:

  • 函数内部,可以通过数组形参,改变实参的内容
  • 传参后,形参丢失了数组的长度信息,退化为地址。后面我们会学习到,其实不是退化为普通的地址,而是退化为“指针”。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!