www.zhnq.net > 多维数组的地址计算C

多维数组的地址计算C

一、多维数组地址的表示方法 设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11 设数组a的首地址为1000,各下标变量的首地址及其值如图所示. C语言允许把一个二维数组分解为多个一维数组来处理.因此数组a可分解为三个一维数组

多维数组其实也是一维数组,只是访问的方式不同而已,他的地址还是线性的,

那么: loc(8,5) = 400+((8-1)*9+(5-1)*6)*2=400+174=574

答:二维数组2113a[3][4]中,a[1]+1是数组5261a[1]的第2个元素的地址,a[0]+4是数组a[0]的第5个元素的地址,但a[0]只有4个元素,所以a[0]+4就是a[1]首元素的地址,因此4102这是两个不同的地址.另外,也可以1653将二维数组a[3][4]看成一维专数组a[12],那么原来的a[1]+1就是一维数组的a[5]的地址,而原来的a[0]+4是一维数组的a[4]的地址,由此可见属,这是两个不同的地址.

要看数组的类型 比如int型,以一个int型数据4个字节,内存的起始地址为1000来说 int a[5]的内存地址:a[0] 1000 a[1] 1004 a[2] 1008 a[3] 1012 a[4] 1016 int a[2][3]的内存地址:a[0][0] 1000 a[0][1] 1004 a[0][2] 1008 a[1][0] 1012 a[1][1] 1016 a[1][2]

问题没说得很清楚呀.我说说一种可能吧.比如int a[10][5];要求 a[6][3] 分量的话,直接整型输出数组a,就是数组a的首地址,比如printf("%d",a);而 printf("%d",a+6*5+3);就是 a[6][3]的地址了.

得到二维数组的首地址和一维数组一样.如: int a[2][3]; int b[7]; int *p,*q; p=a;q=b;这样 p就得到了a的首地址 q得到b的首地址.

1、&a[0][0]为0行0列元素的首地址,a[0]+n为0行第n个元素地址,那么a[0]是表示0行首元素地址吗?>>正确, a[0]就是0行首地址.&a[0]是零行的首地址,实际上行的地址也只有一个,也无所谓0行的首地址吧?>>&a[0]值上, 是和a[0]相同的,

这个地址值,是系统分配给程序的,具体值与运行机器情况有关,不是固定的.int a[10][5];printf("%p\n", a );printf("%p\n", a[0] );printf("%p\n", a[1] );%p是指按16进制数输出地址值!

int i,j;int x;scanf("%d",&x);int mark=0;for(i=0; i<M; i++) for(j=0; j<N; j++) { if(a[i][j]==x) { printf("%d %d\n",i,j); mark=1; } } if(!mark) printf("无此元素\n");

网站地图

All rights reserved Powered by www.zhnq.net

copyright ©right 2010-2021。
www.zhnq.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com