- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[第7章指针
第七章 指 针
上一章我们学习了如何使用数组存放多个相同类型的数据并进行运算,但数组的长度在定义时必须给定,以后不能改变。例如,数组a[10]的长度是10,程序中只能引用10个数组元素a[0]~a[9]。如果事先无法确定需要处理的数据数量,又该如何处理呢?一种方法是估计一个上限,并将该上限作为数组长度,这常常会造成空间浪费。另一种方法是利用指针实现存储空间的动态分配。
指针是C语言中一个非常重要的概念,也是C语言的特色之一。使用指针可以对复杂数据进行处理,能对计算机的内存分配进行控制,在函数调用中使用指针还可以返回多个值。在本章中,除了介绍指针的基本概念外,还要解释如何使用指针作为函数的参数,以及指针用于数组和字符处理方式。
内存单元 地址
7.1 用选择法对10个整数排序 P a数组
P+0 ,a+0 5 a[0] 1000
例7.1.1 对10个整数排序 p+1 ,a+1 8 a[1] 1002
#include stdio.h p+2 ,a+2 2 a[2] 1004
main() p+3 ,a+3 6 a[3] 1006
{ int i,j,t,*p,a[10]; p+4 ,a+4 1 a[4] 1008
p=a; p+5 ,a+5 7 a[5] 1010
printf( 请随意输入10个数:\n); p+6, a+6 3 a[6] 1012
for(i=0;i10;i++) p+7,a+7 0 a[7] 1014
scanf(%d,p+i); p+8,a+8 4 a[8] 1016
p=a; p+9,a+9 9 a[9] 1018
printf( 这10个数是:\n);
for(i=0;i10;i++) 图7.1 a数组的数据在内存中的存放形式
printf(%d ,*(p+i)); 注意:一个整型数据占2个内存单元(2个字节)
printf(\n);
p=a;
printf( 从大到小的排序是:\n);
for(i=0;i10;i++)
for(j=i;j9;j++)
if((*(p+i))(*(p+j+1)))
{ t=*(p+i);
*(p+i)=*(p+j+1);
*(p+j+1)=t;
}
for(i=0;i10;i++)
printf(%d,*(p+i));
printf(\n);
}
运行结果:请随意输入10个数: 5 8 2 6 1 7 3 0 4 9 (输入时数字之间一定有空格)
这10个数是:5 8 2 6 1 7 3 0 4 9
从大到小的排序是:9876543210
7.1.2 地址和指针
在C语言中,如果定义了一个变量,在编译时就会根据该变量的类型给它分配相应的内存单元。例如,假设int型变量占2个字节,则分配2个字节的内存单元,char型变量占1个字节,float实型变量和double实型变量则分别需要4个和8个字节的内存单元。(一般一个字节8位)。
计算机为了对内存单元中的数据进行操作,一般是按“地址”存取的,也就是说对内存单元进行标识编号。如果把存储器看成一个建筑物,建筑物内的房间就是存储器单元,房间号就是地址。设有如下变量定义:
int x = 20, y = 1, z = 155;
因为int型变量的存储长度为2个字节,因此假设C编译器将它们分配到1000~1001、1002~1003、1004~1005的内存单元中,如图7.2(a)所
文档评论(0)