C语言进阶课程学习记录- 数组参数和指针参数分析
- C语言中的数组参数会退化为指针的原因
- 数组参数与等效的指针参数
- 传递多维数组的要点
- 实验-传递多维数组参数
- 小结
本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程,图片全部来源于课程PPT,仅用于个人学习记录
C语言中的数组参数会退化为指针的原因
数组参数与等效的指针参数
传递多维数组的要点
实验-传递多维数组参数
#include <stdio.h>void access(int a[][3], int row)
{int col = sizeof(*a) / sizeof(int);//求列数int i = 0;int j = 0;printf("sizeof(a) = %d\n", sizeof(a));printf("sizeof(*a) = %d\n", sizeof(*a));for(i=0; i<row; i++){for(j=0; j<col; j++){printf("%d\t", a[i][j]);}}printf("\n");
}void access_ex(int b[][2][3], int n)
{int i = 0;int j = 0;int k = 0;printf("sizeof(b) = %d\n", sizeof(b));printf("sizeof(*b) = %d\n", sizeof(*b));for(i=0; i<n; i++){for(j=0; j<2; j++){for(k=0; k<3; k++){printf("%d\t", b[i][j][k]);}}}printf("\n");
}int main()
{int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};int aa[2][2] = {0};int b[1][2][3] = {0};// access(a, 3);//case1//access(aa, 2);//case2// access_ex(b, 1);//case3access_ex(aa, 2);//case4return 0;
}/*output:
case1:
sizeof(a) = 4
sizeof(*a) = 12
0 1 2 3 4 5 6 7 8case2
sizeof(a) = 4
sizeof(*a) = 12
0 0 0 0 0 1case3
sizeof(b) = 4
sizeof(*b) = 24
0 0 0 0 0 0case4:
sizeof(b) = 4
sizeof(*b) = 24
0 0 0 0 0 1 2 3 4 5 6 7*/
小结
C语言中只会以值拷贝的方式传递参数
C语言中的数组参数必然退化为指针
多维数组参数必须提供除第一维之外的所有维长度
对于多维数组的函数参数只有第一维是可变的