设为首页 加入收藏

TOP

挑战30天C++入门极限:c/c++关于多维数组指针变量的学习!
2014-11-17 10:20:24 】 浏览:207
Tags:挑战 入门 极限 c/c 关于 多维 指针 变量 学习

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


#include
main()
{
static inta[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 /* 把a[0]的地址赋予指针变量p,条件判断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),对于多维数指针的理解是个比较难需要反复观察联系的地方需要谨慎
如果多维数组的概念不清楚就需要从前面学起注意知识的积累!
*/


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++输出控制 下一篇挑战30天C++入门极限:就c++中的c..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目