WEB开发网
开发首页
CMS教程
WEB开发
网站运营
网页设计
图形图像
数据库
服务器
网络安全
手机开发
软件开发
操作系统
软件教学
PHP开发
PHP培训
开发学院
软件开发
C++
对C/C++中多维数组指针的理解
阅读
对C/C++中多维数组指针的理解
2008-03-08 21:26:08 来源:WEB开发网
核心提示:
对于多维数组的理解比较困难,这也是由于和一维数组指针含义有冲突造成的,对C/C++中多维数组指针的理解,因此对于多维数指针的理解是个比较难,需要反复观察,计算出平均值和显示其中一个同学的4门课成绩,此例是对多维数组指针和多维数组 的指针作为涵数参数传递的总结,谨慎使用,假如多维数组的概念不清楚那就需要从C/C++基础学
对于多维数组的理解比较困难,这也是由于和一维数组指针含义有冲突造成的,因此对于多维数指针的理解是个比较难,需要反复观察,谨慎使用,假如多维数组的概念不清楚那就需要从C/C++基础学起注重知识的积累!
C 代码
/*程序作者:管宁
所有稿件均有版权,如要转载,请务必闻名出处和作者*/
#include <stdio.h>
main()
{
static int a[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]+12;p++) /* 把a[0]的地址赋予指针变量p,条件判定p<a[0]+12表示的是小于最后一个元素的地址; */
{
if((p-a[0])%4==0) /* 利用整数指针变量p减去当前地址判定出是不是已经显示出了四个值,换行回车 */
{
printf("\n");
}
printf("%4d",*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 代码
/*程序作者:管宁
所有稿件均有版权,如要转载,请务必闻名出处和作者*/
#include <stdio.h>
main()
{
void search_score(); /* 定义自定义涵数类型为不返回型 */
void count_avg(); /* 定义自定义涵数类型为不返回型 */
static float a[3][4]={{97,45.5,66,77},{88,92.5,78.5,66},{83,74.5,92,100}}; /* 输入3个学生的各自4门课的成绩 */
search_score(a,0); /* 调换自定义涵数显示其中一个同学的各门课成绩 */
count_avg(*a,12); /* 调换自定义涵数显示3个同学各门课的平均成绩成绩 */
/* 注重上面的*a其实也就是a[0]或者是&a[0][]0将这行改写成count_avg(a[0],12);或者count_avg(&a[0][0],12)也都是对的 */
}
void search_score(p,n)
float (*p)[4]; /* 定义一个指针变量p,说明它是一个指向一个包含4个整型变量一维数组的指针 */
int n; /* 定义形式参数n为整形 */
{
int i; /* 定义用于循环的变量i */
for (i=0;i<4;i++ ) /* 这里循环4次用于打印一个同学的4门课成绩 */
{
printf("%7.2f",*(*(p+n)+i));
}
printf("\n");
}
void count_avg(p,n)
float *p;
int n;
{
float *p_end;
float sum = 0;
float avg;
p_end = p+n-1; /* 计算出最后一个数组元素的地址 */
for (;p<=p_end;p++) /* 循环到最后一个元素地址就停止 */
{
sum += *p;
}
avg = sum/n;
printf("avg=%7.2f\n",avg);
}
/*
注重此题的意思在于输入3个同4门课的成绩,计算出平均值和显示其中一个同学的4门课成绩,此例是对多维数组指针和多维数组
的指针作为涵数参数传递的总结,认真联系和体会可以很好的了解多维数组指针的概念到底是什么!
*/
更多内容请看C/C++技术专题专题,或 right">(出处:清风软件下载学院)
Tags:
多维
数组
指针
编辑录入:爽爽 [
复制链接
] [
打 印
]
相关阅读
››
多维数组转一维
››
指针实现交换两个数字的大小
››
数组排序方法的性能比较(3):LINQ排序实现分析
››
数组排序方法的性能比较(1):注意事项及试验
››
数组排序方法的性能比较(2):Array.Sort<T&g...
››
数组取最大值与最小值
››
指针实现交换两个数字的大小
››
指针数组与数组指针
››
数组的初始化
››
多维数组
››
指针运算符与指针表达式
››
指针变量的定义与引用
中查找“对C/C++中多维数组指针的理解”更多相关内容
中查找“对C/C++中多维数组指针的理解”更多相关内容
上一篇:
c/c++中字符串常量的不相等性,以及字符串的copy
下一篇:
Visual C++常用数据类型转换详解
更多精彩
Vista、Windows7任务栏像素对比
另类美容大法让人物瞬间变老
3ds Max制作《泄漏》特效解析(第二部分)
在云中拦截恶意软件: 能否成功?
Mental Ray灯光渲染解析
赞助商链接
热点阅读
ul li 横向排列不换行的做法
kmixer.sys引发系统蓝屏之解决途径
VMRC Plus使管理Virtual Server变得简单
如何更改MFC按钮的背景色
Linux/ubuntu 查看JDK版本是32位还是64位
域控制器上 Lsass.exe 进程的内存和cpu使用...
Fireworks MX对网页的逆向导入
通过远程管理更改ESXi主机root用户密码
[shell] if else以及大于、小于、等于逻辑表...
千千静听制作一张自播放音乐光盘
焦点图片
Android获取SD卡总容量...
Photoshop调出内衣美女...
Windows7系统下有线网...
解决FF浏览器和IE下载...
最新推荐
Android 如何修改默认输入法
Windows 8中将开始菜单(metro界面)创建关机...
Android获取SD卡总容量,可用大小,机身内存...
详解Linux 系统命令及其使用
解决网页内容无法复制
实用的Win 7远程桌面连接技巧
Photoshop调出内衣美女照柔美效果
Windows7系统下有线网络优先级设置
JQuery实现下拉,单选,复选三大控件方法,
php常用过滤非法/特殊字符串的方法
精彩阅读
VC++入门视频教程-第72讲
特价机票监视查询 伴你节日快出游
Word 2007表格制作多行合一文件头
Illustrator CS 矢量三维工具探索
野马的性格 Java SE 6.0新特性体验
Illustrator制作整齐的瓷砖拼贴效果图案
如何使用JSP访问MySQL数据库
VC++入门视频教程-第155讲
Photoshop为扫描的纸上线描画去除背景
Excel月日不足10在前面添0的公式代码
PowerPoint 2010:为同事广播幻灯片
使用活动目录的意义
技术首页
| 关于本站 |
广告合作
|
联系我们
|
友情连接
|
网站地图
Copyright © 2003-2013
CnCms
.Com
. All Rights Reserved 京ICP备10000768号