二维数组与函数
1.二维数组的元素作为函数参数
- 二维数组的元素就相当于变量,作为函数参数与变量相同
~~ void test(char c);
~~ int main(int argc, const char * argv[]) {
~~ char cs[2][3] =
~~ {
~~ {'l', 'n', 'j'},
~~ {'l', 'm', 'j'}
~~ };
~~ printf("cs[0][0] = %c\n", cs[0][0]);
~~ test(cs[0][0]);
~~ printf("cs[0][0] = %c\n", cs[0][0]);
~~ return 0;
~~ }
~~ void test(char c)
~~ {
~~ c = 'w';
~~ printf("我被执行了\n");
~~ }
~~
~~ 输出结果:
~~ cs[0][0] = l
~~ 我被执行了
~~ cs[0][0] = l
2.二维数组中的一维数组作为函数
- 二维数组的一维数组实际上就是一个一维数组,作为函数参数与一维数组相同
~~ void test(char c[]);
~~ int main(int argc, const char * argv[]) {
~~ char cs[2][3] =
~~ {
~~ {'l', 'n', 'j'},
~~ {'l', 'm', 'j'}
~~ };
~~ printf("cs[0][0] = %c\n", cs[0][0]);
~~ test(cs[0]);
~~ printf("cs[0][0] = %c\n", cs[0][0]);
~~ return 0;
~~ }
~~ void test(char c[])
~~ {
~~ c[0] = 'w';
~~ printf("我被执行了\n");
~~ }
~~ 输出结果:
~~ cs[0][0] = l
~~ 我被执行了
~~ cs[0][0] = w
3.二维数组作为函数参数
- 二维数组作为函数参数是地址传递
- 二维数组作为函数形参,参数中一维数组的元素个数不可以省略
~~ void test(char cs[2][]) // 错误写法
~~ {
~~ printf("我被执行了\n");
~~ }
~~
~~ void test(char cs[2][3]) // 正确写法
~~ {
~~ printf("我被执行了\n");
~~ }
~~
~~ void test(char cs[][3]) // 正确写法
~~ {
~~ printf("我被执行了\n");
~~ }
~~
- 二维数组作为函数参数,在被调函数中不能获得其有多少行,需要通过参数传入。
~~ void test(char cs[2][3])
~~ {
~~ int row = sizeof(cs);
~~ printf("row = %zu\n", row);
~~ }
~~ 输出结果:
~~ row = 8
- 二维数组作为函数参数,在被调函数中可以计算出二维数组有多少列
~~ void test(char cs[2][3])
~~ {
~~ size_t col = sizeof(cs[0]);
~~ printf("col = %zd\n", col);
~~ }
~~ 输出结果:
~~ col = 3