报课、招生咨询电话:010-51268840/41

首页 > 计算机考试 > 水平考试 >
→论坛登陆 用户名  密码  
程序员考试补课笔记-第十天

作者: 发布时间:2005-03-01 12:25:31 来源:中国招生考试在线
程序员考试补课笔记-第十天

今天接着上天的二维数组,我们看看指向二维数组的指针是怎么的。在讲之前我想再重复一次,如果你自己理解好二维数组的就按你以往的去理解吧。不过多想想几种方法也是一件好事,那么下面就来讲讲了。

  现在来看看昨天的那个二维数组图,第九天图一。我们定义一个指向二维数数的指针

int a[3][4];

int *p;

p=a;

  其实这也指向一维数组的指针完全没有分别,二维数组因为是行优先的,一行下来就是列顺序了,我们可以这样来用指针指向列,如下:

p++;

  我们这里就是指向了第0行的第1列了,那么我们怎么可以到第下一行呢,其实定义数组时内存就给数组分配好一连串的连续空间,我们直接可以将指针继续往下移,当移到了0行最后一列时,加移的话就到了第1行了。其实C语言里还有一种更方面的指向方法,看如下:

int (*p)[4] /*这里是定义一个数指针,而这个指针是指向有数组四个元素的指针*/

我们看看这种定义的方式,*p为什么一定要括号括住呢,因为[]这个运算符比*优先,如果不加括号的话就变成了定义另一个指针最,至于是什么指针在最面就会讲到了,现在先来看看这种指针。

p=a;

p++; 这样会得到什么的结果呢?就是直接往下移一行了,这也是和前天说过的那个道理一样,是按照定义的类型结合来到运算的。我们知道了如何可以移行,那么该怎么移列呢?这个问题又更复杂一点了,试着把指针移到第1行第2列看看。我们先来看看这个表达式代表什么吧,a+1 这就是第一行的首地址吧,同理p+1也是指向第一行的首地址。至于列呢?先想想一维数组是怎么移到列的,就是首地址加上列序吧!那么我们就可以先表达出一维数组的首地址先,*(p+1)+2,看,这样是不是指向了第一行第二列了呢。我们不可以简单的理解(p+1)为行,从另一种意义上可以看成是列的首地址了(这里实在太难理解了,明还是有一点明,不过我还想用回自己一直对指针的理解好了,千万不要综合起来理解喔,这样就太错特错了)。

好了说回了二维数组成的现在来看看还有其它的什么指针,字符指针是比较简单的,不过也有它的一些特别之处。我们来看看以下的一些程序:

char *p;

p="ABC"; /*这里说说,既然是字符串就是一定有结束符的,这是和字符数组不同的*/

这样的赋值是可以的,这里是将字符串ABC的首地址赋给指针p,下现再看看另一个程序:

char a[4];

a="ABC";

  这里有错吗?对于C语言来说是错了的了,因为字符数组a是一个常量,不能给赋值。其它的高级语言就可以直接赋值给它就回事了,那么我们想把ABC赋给字符数组该怎么呢,这里有几种方法,一种就是一个一个字符赋值,一种就是利用指针,不过这里还是用回C语言函数库里的复制字符串函数完成strcpy();大家应该都对这个函数不默生吧,那好,现在就给五分钟做做练习,编制一个类于strcpy()的函数。…………时间真的过得快,我把我做的写出来吧。

mycpy(char *s1,char *s2)

{ for(;*s1++=*s2++;); }

好了,就这么短短二行就完成了复制功能,这只有C语言才能做到的。

现在再来看看以下两个程序吧

char *p,*q; char *p,*q,*r;

p="ABC"; r="ABC";

q="ABC"; p=r;

*q='D'; q=r;

printf("%s",%s",p,q); *q='D';

printf("%s,%s",p,q);


这里的答案是什么呢?自己先想想吧。

  好了,应该都想完了吧,现在就给出正确的答案,第一条程序是输出ABC,DBC,而第二条程序就是输出DBC,DBC。这里为什么呢?其实是因为第一个程序都是指向了同一个地址,那当然就是值一样啦。

现在就剩下函数指针了,其实我们平常也不怎么多人,但是老师还是给我们讲了一下,也提出了一个特别的地方,是今天我们才发现的,程序如下:

int b=0;

int a[2]={10,20};


int *ab(int *p)

{

p++;

return (p);

}

main()

{

b=*ab(a); /*这里我们试着将调用的函数返回的地址再加*号,看看可不可以指到那个值,至于结果怎么样,我们也没有试过,我在写这篇日记时也没有上过机试,大家有兴趣也试试吧,这个问题我们是怎么引出来的呢,其实我们一开始定义了一个指向函数的指针,就比如(*cd)()吧,我们提出了如果没有了括号会怎么样,因为本来(*cd)()就是指向一个返回指针值的函数,那么我们为了试验所以另编一个返回地址的函数来试试*/

printf("%d",b);

}

  好了,今天就将指针讲完了,不过指针的运用就还有很多在后面呢,就我知道的就有结构体和共用体还可以用到指针,跟着就是其它的一个综合运用链表、堆栈、队列等等的。我想我就是这方面还一点经验都没有吧,之前看了一下数据结构也没有太大的兴趣看下去了,因为我看到一大堆的指针都已经头晕了。不过近几天拿回来看看又好像明了些什么似的,反正就觉得不太头晕了吧。
    育路网
 
 
                                        
评论】【加入收藏夹】【 】【打印】【关闭
育路网2007年夏令营联展
 更多有关新闻:
 
·[作文雅思写作高分必读:小作文句子模 ·[资讯中心湖北:2008上半年英语等级考试(P
·[经验共享成考高分考生必备临场得分策略 ·[复习指导成考高起点历史复习方法
·[招生简章上海外国语大学07年成考招生简章 ·[考试指南日语等级考试总括
·[成考动态广东惠州08年成考复习大纲确定 ·[真题法律硕士考研辅导:民法代理真题
·[二级真题2002年9月二级笔试试卷C语言程序 ·[复习指导2008年法硕联考民法学必须掌握的
·[复习指导法律硕士考研辅导:民法案例解析 ·[三级真题计算机等级考试三级数据库知识考
·[招生信息2008全国各高校法律硕士排名榜 ·[四级真题计算机等级考试四级笔试样题
·[复习指导2008年法律硕士大纲解析及考试预 ·[一级真题全国计算机等级考试一级WPS Offi
发表评论
用户名: 密码:
验证码: 匿名发表
课程搜索:
选择分类:
课程关键字:
课程 学校
 2008年首都高校秋季招生
北京理工大学2008年招生简章
北京文理研修学院2008年招生简章
北京建设大学2008年招生简章
北京中山学院2008年招生简章
北京城市学院2008年招生简章
培黎职业学院2008年招生简章
北京金融学院2008年招生简章
北京吉利大学2008年招生简章
北方工商管理学院2008年招生简章
 本周推荐课程
·初中起点雅思半年脱产 ·启德雅思6分冲刺课程
·新概念1+2册慢速精讲课 ·环球新托福100分强化
·北文王长喜四级强化班 ·英语四、六级培训课程
·海文考研数学课程 ·海文考研英语课程
·北大企业管理高级研修班 ·清华企业领导人研修班
·中美高中生交换项目 ·北工大中加学院2+2本科
·劳动和社会保障部物流师 ·物业管理师职业培训
·市场营销经理国际资格 ·现场管理实务培训
清华大学留学
中法管理硕士预科班
课程咨询热线:010-51268840 51268841
 最新新闻
·成考高分考生必备临场得分策略
·县科技局认真组织实施机关公务员和事业单位工
·江苏扬州邗江区组织初任公务员培训
·2008年吉林省各级机关考录公务员网上报名须知
·山东6名监督员首现公务员面试考场
·山东日照公务员考试456人进入面试
·时事评论:应届生真的不适合“考公”吗?
·"聚会之地"堪培拉:年轻的"公务员之城"风
·允许打工﹕来澳留学生签证费涨20澳元
·留学预科择校应三看
 育路社区            进入>>
 
学员报名服务中心: 北京北三环西路32号恒润中心1806(交通位置图
咨询电话:北京- 010-51268840/41 传真:010-51418040 上海-021-64392659、64397431
育路网-中国新锐教育社区: 北京站 | 上海站 | 郑州站| 武汉站
本站法律顾问: 邱清荣律师
北京育路互联科技有限公司版权所有 | 京ICP备05012189号