C中的二维数组打印
来源:互联网 发布:河源市民网络问政平台 编辑:程序博客网 时间:2024/06/15 03:02
简单的打印一个二维数组,区分指向数组的指针(数组指针)和指针构成的数组(指针数组)
#include <stdio.h>void printAry( int (*a)[3], int num ) /* 注意,这里的3会被编译器记住,表示指针所指数的第一维的大小 */{int i = 0; int j = 0;for ( i = 0; i < num; i++ ){for ( j = 0; j < 3; j++ ){printf( "%4d ", a[i][j] );}printf( "\n" );}}void printAry2( int *a, int num ){int i = 0; int j = 0;for ( i = 0; i < num; i++ ){for ( j = 0; j < 3; j++ ){printf( "%4d ", *(a + i * num + j) );}printf( "\n" );}}void printAryInd( int * a[3], int num ) /* 注意,这里的3并不起任何作用,并不表示所传数组的大小,数组的大小由num指定 */{int i = 0, j = 0;for ( i = 0; i < num; i++ ){for ( j = 0; j < 3; j++ ){printf( "%4d ", a[i][j] );}printf( "\n" );}}void printAryIndTwo( int ** a, int num ){int i = 0, j = 0;for ( i = 0; i < num; i++ ){for ( j = 0; j < 3; j++ ){printf( "%4d ", a[i][j] );}printf( "\n" );}}int main(){inta[2][3] = {1, 2,3,11, 22, 33};int*b[3];int*c;inti = 0;for ( i = 0; i < 2; i++ ){b[i] = a[i];}c = (int *) a;printAry( a, 2 );printf( "%s\n", "--------------" );printAry2( c, 2 ); /* 可以强转成一个一维数组 */printf( "%s\n", "--------------" );printAryInd( b, 2 ); /* 这里只给数组前两个元素赋过值 */printf( "%s\n", "--------------" );printAryIndTwo( b, 2 );}
当实参是二位数组a[2][3]时,形参用(*arr)[3]指向数组的指针可行,而用*arr[3]指针数组运行为什么不能得到正确结果呢?
因为int (*arr)[3] 作为参数在和形参a[2][3]结合时,arr 是一个数组的指针,也就是指向 &a[0] 的地址,这个数组每个元素都 是 int [3]类型的一维数组 ,所以可以用二维数组首地址来作为形参。
而 int *arr[3]表示arr是一个数组的首地址,这个数组里保存的元素是3个int * 类型的指针元素。 当形参为int *arr[3]时,这里的3并不起任何作用,并不表示所传数组的大小,数组的大小由参数num指定。
直接用数组a[2][3]首元素作为形参时,系统会报数据类型不匹配的错误。如果硬要调用printAryInd函数,则可以先定义一个 int *b[3],要这样赋值才行,int * b[3]={a[0],a[1],NULL} 不能直接传二维数组的首地址。
0 0
- C中的二维数组打印
- c++-二维数组打印对角线打印
- C语言中的二维数组
- 【C++】二维数组中的查找
- 用二维数组打印杨辉三角(c/c++)
- 打印二维数组
- 螺旋打印二维数组
- 打印不规则二维数组
- 转圈打印二维数组
- 二维数组顺时针打印
- 二维数组打印
- 转圈打印二维数组
- java打印二维数组
- 顺时针打印二维数组
- 二维数组的打印
- 二维数组的打印
- 打印二维数组
- 二维数组对角线打印
- can not create edge 'e0' with unspecified source解决方案
- 单点登录SSO
- 在Unity3D中控制动画播放
- 银行卡以及身份证加密
- dockerfile小记
- C中的二维数组打印
- java注释
- 移动端input弹出带有搜索按钮的键盘与获取点击搜索按钮触发的事件
- C++基础-string截取、替换、查找子串函数
- AngularJS过滤器
- 欢迎使用CSDN-markdown编辑器
- 数据分析-箱线图
- myeclipse修改内存大小不足
- CentOS7在空闲一段时间或重启后网络总需要手动开启解决方案