xqnx.net
当前位置:首页 >> C语言指针输出二维数组 >>

C语言指针输出二维数组

C语言的数组(不管多少维)在内存中都是线性储存的.所以用一级指针加偏移就可以访问所有元素. 举个例子,有一个10*10的二维数组a,这样就可以输出:int a[10][10]; int *p = (int *)a; int i; for (i = 0; i < 10 * 10; i++) printf("%d", *(p + i));

展开全部#include #include #define N 10 void fun(int (*p)[N],int n,int m){ int i,j; for(i=0;i for(j=0;j printf("%d\n",*(*(p+i)+j) ); } } int main(){ int p[N][N]; int n,m,i,j; scanf("%d%d",&n,&m); for(i=0;i for(j=0;j scanf("%d",*(p+i)+j); } fun(p,n,m); return 0; }

楼上的回答基本是正确的, 不过int *(*p2)[3],int (*p2)[3]不是一样的,而且int *(*p2)[3]的定义是合法的. int *(*p2)[3]定义了一个指向指向长度为3的一维整型指针数组的指针.

你这样是不能的,因为:1.在fun1里面声明的局部变量到fun1函数结束的时候就没有了,变量的作用域不够.这一点就决定了你不可能在fun2中输出nums[10][3]中的内容.你可以在fun1中动态申请内存,或者在外部声明成全局变量.2.指针用的不对,你要用的是一个字符指针,fun1返回的是一个字符串的指针的指针.在上面的声明之后,可以用循环来输出

要用Unicode

设二维数组为typename a[M][N],则指向该数组的指针为typename (*p)[N] = a;这样就可以用p来代替二维数组了.

首先,你下面for循环有误,不是for(j=0;i<2;j++)而是for(j=0;j<2;j++) 然后 过程的详细解释如下: #include<stdio.h> main() { int a[3][2],(*p)[2],i,j;//二维数组名是数组第一行元素的地址,也就是a为a[0]的地址 p=a; a[0][0]=1; p[0][1]=2;//这

参见:C programming Language p113p是个6元素的数组指针,初始值是x的第一个元素*(p+1)是二维数组x的第二个一维数组{4,5,6,0,0,0}的第一个元素的指针然后下移 逐个取出二维数组中一维数组的元素并相加

C语言中 指针做函数参数传递二维数组有两种基本方法:1、传递“数组指针”#include <stdio.h> void output( int (*pa)[3], int n )//这个函数只能输出n行3列的二维数组 { int i,j; for( i=0;i<n;i++ ){ for( j=0;j<3;j++ ) printf("%d ", pa[i][j] ); printf("\n"); } }

展开全部#include void print(int a[3][2]) { int i, j ; for(i=0; i<3; i++) for(j=0; j<2; j++) printf("a[%d][%d] is: \n", i, j, a[i][j]); } void main() { int i, j ; int a[3][2]={{1,0},{2,0},{3,0}}; int (*p)[2]=&a[0]; for(i=0; i<3; i++) for(j=0; j<2; j++) printf("a[%d][%d] is:\n ", i, j, *(*(p+i)+j)); print(p); }

网站首页 | 网站地图
All rights reserved Powered by www.xqnx.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com