admin 管理员组文章数量: 1087139
2024年3月14日发(作者:在线文档转普通文档)
2011年第2期 福建 电脑 163
C语言中指针和数组区别的分析
黄晓群
(福建师范大学人民武装学院福建福州350007)
【摘 要】:在c语言中,指针和数组即是难点也是重点,在这里通过指针和数组的区别来加深对他们
的理解。
【关键词】:指针 数组 c语言
对于C语言编程新手来说.经常认为n数组和指针 在C语言中。我把地址形象地称为”指针”.把存放
是相同的”。其实这种说法是不完全正确的,他们是有 地址的变量称为指针变量.通常我们把指针变量简称
区别的。ANSIC标准6.542里建议:
为指针。所以指针里存放的是数据的地址。而数组里存
注意下列声明的区别: 放的是数据的值。
extern int x:
2.数组和指针的访问方式不同
数组采用的是直接访问方式.而指针采用的是间
extern int y[];
第一条语句声明x是一个int型的指针.第二条语
接访问方式。
句声明Y是int型.数组长度尚未确定.其存储在别处
如:char a【6】=”China”; c=a【3】;
定义
程序编译时。给数组分配内存。如图:
C l h l i l n I a I\0
2000 +1+2 +3 +4 +5 ……
标准里并没有做更细的规定.许多C语言书籍对
数组和指针何时相同、何时不同也是含糊其辞一带而
过。为了更好地理解指着与数组,在这里我们谈谈他们
之间的区别。
数组和指针的不同之处
一
、
我们来看以下代码:
ile1.fc
假设编译器符号表给的一个地址是2000程序运
行时,取3的值,将它与2000相加,取得(2000+3)的内
容。在这里,每个符号的地址在编译时可知。因此。如果
编译器需要一个地址来执行某个操作得花.它就可以
int a[1O0];
直接地进行操作,并不需要增加指令取得具体的地址。
相反,对于指针。它必须首先在运行时取得它的当前
值,然后才能对它进行解除操作。
立口:char p=”China”; c p『31;
ifle2.c
extern int a:
编译器编译时。编译器符号表给了一个p,其地址
程序编译时出错,在这里,数组a[1O0]与女a是两
种不同的概念.以上的错误相当于把浮点型数据和整
型数据混为一谈,如:
ile1.fc
匝Ⅱ工工丑 卫…・
5000+l +2 +3 +4 +5
运行时,取得地址3000的内容,即5000,后与3相
加,最后取(5000+3)的内容。
数组和指针的不同点还在于:指针通常由于动态
数据结构.而数组通常用于存储固定数目且数据类型
ile2.fc
extern char I:
相同的元素;指针用malloc0、free0函数来动态分配空
间或释放空间.而数组则隐式分配和删除;指针通常指
向匿名数据,而数组自身即为数据名;等。
从上面.我们可以很明显地看出int和char类型不
二、数组和指针的相同之处
数组和指针什么时候相同呢?
匹配.同理指针和数组两种不同类型也是不匹配。
下面我们来谈谈是数组与指针的区别:
1.指针和数组保存数据的内容不同
1.”作为函数参数的数组名”等同于指针
rhe C Programming Language,第二版,Kemighan&
164 福建 电脑 201 1年第2期
Ritchie,第99页里指出:
As format parameters in a function definition
组的引用如ari1在编译时总是被编译器改写成 (a+i)的
形式 C语言标准要求编译器必须具备这个概念性的
行为。我们可以这么记着:方括号『]表示一个取下标操
char sI]
and
char s:
作符,就像减号表示一个减法运算符一样。取下标操作
符就像取一个整数和一个指向类型x的指针.所产生
are equivalent。‘・・・・
意思是:作为函数参数定义的形式参数,char s口和
的结果类型是X.一个在表达式中的数组名于是就成
了指针。
char s是一样的
在表达式中.指针和数组是可以相互替换的,因为
在函数形参定义这个特殊的情况下.编译器必须
把数组形式改写成指向数组第一个元素的指针形式。
他们在编译器里的最终形式都是指针。并且都可以进
在这里,编译器只向函数传递数组的地址,而不是整个
行取下标操作 编译器可以自动把下标值的步长调整
到数组的大小.如:long型数据的长度是4个字节.那
数组的拷贝。因此以下几种:
swap(int ptl・int pt2)
f..…。】
与
么m[i1和m『i+1]在内存中的距离就是4,而不是1。在
对起始地址执行加法操作之前.编译器会自动负责计
算机每次增加的步长 这就是为什么指针总有类型限
制的原因.每个指针只能指向一种类型的原因是:因为
编译器需要知道对指针进行解除引用操作时应该取多
少个字节.和每个下标的步长应取多少个字节
三、总结
swap(int ptl[1,int pt21])
【._…‘1
与
swap(int ptl[10],int pt21101)
l-.…・】
是一样的。
总而言之。当声明时(除作为函数参数除外),指针
所以主函数的参数中char料argv和char argv II[]
和数组是不能替换的,如:nint all0]:”,只能用”extern a
可以相互替换。
『lo];”,而不能使用vleXtern a;n,又如"int af10 和”int
2.”表达式中的数组名”就是指针.数组下标作为指
a;”意义也是不同的:当作为函数参数或应用时,两者
针的偏移量
假设我们声明:
int a[1 o], p,i_1;
就可以通过以下任何一种方式访问a【i】;
p=a;p【i];
是相同的,如:”a『i1=5;”等同于 (a+i)=5;”,又如,主函数
的参数中char{ argv和char argv[]H可以相互替换。
参考文献:
【1】谭浩强,C程序设计(第三版)【M】,北京:清华大学出版社,
2005
或p=a; (p+i);
或p=a+I; p;
【2】E.Balagurusamy,标准C程序设计(第4版)[M】,北京:清华大
学出版社.2008
实际上,我们还可以采用其它更多的方法。对于数
(上接第130页1
【3】誊本饕, 序嘿计_基础 北市;高.等教育出雌社『M1,2OQ3 .
②页面层:由Web页面组成,可以是以HTML、
产品的各种信息进行Web挖掘、统计和分析,优化网
ASP、JSP、ASPX、PHP等为扩展名的文件类型。 站的结构与内容、提供个性化的服务。首先,规范客户
再通过数据挖掘技术提取相关信息,了解客户对
③信息层:包含通过HTML文本分析器。从Web
信息,
页面中分析出的”描述信息”、n链接信息”和”其他无关 陶瓷产品的需求倾向。其次,针对客户需求,规范陶瓷
信息”等。这些”描述信息”是对链接信息的语义描述,
产品的信息资源,为陶瓷企业的发展提供决策依据。
可以把每个链接信息的”描述信息”看成是一段文本.
因此,不同的链接都对应着不同的文本段。
参考文献:
1】朱焱,万维网资源质量模式挖掘技术分析,计算机科学,
④知识层:是从大量的数字信息中挖掘出有用的
【
信息,即陶瓷产品资源。信息层中得到的隐含模式X.
2010年8月
2]易斌,重视深网资源挖掘提升信息检索技能,现代情报,
指导链接信息通过过滤器.从而分离出陶瓷产品资源
【
2008年8月
的地址,通过地址可以得到对应的陶瓷产品信息资源。
[3]何玉香,曹丽颖,宋志恒,网络教育资源Web挖掘研究,天津
⑤应用层:基于陶瓷产品资源之上的应用开发.可
师范大学学报(自然科学版),2009年1月
以是对陶瓷产品资源的标准化.也可以是对陶瓷产品
[4蔡群力,基于web挖掘的教学资源搜索引擎的模型设计研 4】
资源的重新组织等方式
究,福建教育学院学报.2008年7月
四、结语
【5】柳炳祥,李海林,刘锋,一种基于云理论的web日志定性规则
Web挖掘技术从Web数据挖掘中挖掘出有意义
提取方法,计算机应用与软件.2010年2月
的规则和知识。本课题的研究可以通过对客户、服务、
版权声明:本文标题:C语言中指针和数组区别的分析 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1710385951a570735.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论