|
程序作者:管宁 YRfLinux联盟 站点:www.cndev-lab.com YRfLinux联盟 所有稿件均有版权,如要转载,请务必著名出处和作者*/YRfLinux联盟 YRfLinux联盟 #include YRfLinux联盟 main() YRfLinux联盟 { YRfLinux联盟 staticinta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; /* 定义一个3行4列的二维数组 */YRfLinux联盟 int*p; YRfLinux联盟 printf("%d %d\n",a,*a); YRfLinux联盟 printf("%d %d\n",a[0],*(a+0)); YRfLinux联盟 printf("%d %d\n",&a[0],&a[0][0]); YRfLinux联盟 printf("%d %d\n",a[0][0],*(*(a+0)+0)); YRfLinux联盟 YRfLinux联盟 for(p=a[0];p/* 把a[0]的地址赋予指针变量p,条件判断pYRfLinux联盟 { YRfLinux联盟 if((p-a[0])%4==0) /* 利用整数指针变量p减去当前地址判断出是不是已经显示出了四个值,换行回车 */YRfLinux联盟 { YRfLinux联盟 printf("\n"); YRfLinux联盟 } YRfLinux联盟 printf("%4d",*p); /* 打印出元素的值 */YRfLinux联盟 } YRfLinux联盟 printf("\n"); YRfLinux联盟 } YRfLinux联盟 YRfLinux联盟 /* YRfLinux联盟 对于多维数组的理解比较困难,这也是由于和一维数组指针含义有冲突造成的,例如第5行中的a和*a打印出来的值, YRfLinux联盟 就会让人弄不明白我们知道数组传递的地址那么a表示这个数组的其实地址为什么*a却不是实际值呢?原因是在多维 YRfLinux联盟 数组中a+0表示的是第0行的首地址,a+1表示是第一行的首地址,那么*a其实就是*(a+0),那么第一个元素其实是a[0][0] YRfLinux联盟 而*(a+0)仅仅是把一个3行4列的二维数组拆为了三个一维数组,*(a+0)显然表示的不是物理位置也就不可能得到第一个 YRfLinux联盟 元素的值了,它仅仅是一个内存地址也就是第0行的启始地址,再看8行中的*(*(a+0)+0),它表示的则是第0行第0列个元素 YRfLinux联盟 的值也就是a[0][0],再次强调*(a+0)表示的是数组第一行的首地址,也就是第二行的*(a+1),而元素值要得到显然就是 YRfLinux联盟 *(*(a+0)+0)了如果是第0行第1个也就是*(*(a+0)+1),对于多维数指针的理解是个比较难需要反复观察联系的地方需要谨慎 YRfLinux联盟 如果多维数组的概念不清楚就需要从前面学起注意知识的积累! YRfLinux联盟 */YRfLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|