您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  挑战30天C++入门极限:c/c++关于多维数组指针变量的学习! 【注册男护士专用博客】          

挑战30天C++入门极限:c/c++关于多维数组指针变量的学习!

www.nanhushi.com     佚名   不详 

/*程序作者:管宁
站点:www.cndev-lab.com
所有稿件均有版权,如要转载,请务必著名出处和作者*/

#include
main()
{
staticinta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; /* 定义一个3行4列的二维数组 */
int*p;
printf("%d %d\n",a,*a);
printf("%d %d\n",a[0],*(a+0));
printf("%d %d\n",&a[0],&a[0][0]);
printf("%d %d\n",a[0][0],*(*(a+0)+0));

for(p=a[0];p
{
if((p-a[0])%4==0) /* 利用整数指针变量p减去当前地址判断出是不是已经显示出了四个值,换行回车 */
{
printf("\n");
}
printf("M",*p); /* 打印出元素的值 */
}
printf("\n");
}

/*
对于多维数组的理解比较困难,这也是由于和一维数组指针含义有冲突造成的,例如第5行中的a和*a打印出来的值,
就会让人弄不明白我们知道数组传递的地址那么a表示这个数组的其实地址为什么*a却不是实际值呢?原因是在多维
数组中a+0表示的是第0行的首地址,a+1表示是第一行的首地址,那么*a其实就是*(a+0),那么第一个元素其实是a[0][0]
而*(a+0)仅仅是把一个3行4列的二维数组拆为了三个一维数组,*(a+0)显然表示的不是物理位置也就不可能得到第一个
元素的值了,它仅仅是一个内存地址也就是第0行的启始地址,再看8行中的*(*(a+0)+0),它表示的则是第0行第0列个元素
的值也就是a[0][0],再次强调*(a+0)表示的是数组第一行的首地址,也就是第二行的*(a+1),而元素值要得到显然就是
*(*(a+0)+0)了如果是第0行第1个也就是*(*(a+0)+1),对于多维数指针的理解是个比较难需要反复观察联系的地方需要谨慎
如果多维数组的概念不清楚就需要从前面学起注意知识的积累!
*/

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目