指针和数组区别

指针和数组区别

ID:43696474

大小:37.09 KB

页数:4页

时间:2019-10-12

指针和数组区别_第1页
指针和数组区别_第2页
指针和数组区别_第3页
指针和数组区别_第4页
资源描述:

《指针和数组区别》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、对于c语言的学习,一直处于表面、基础以及混沌的状态。进入了计算机学院后,为了避免编程过程中浪费一些不必要的时间去查错、去优化程序,深深觉得应该从现在起一点一滴踏踏实实的站在巨人的肩膀上进行总结、学习。希望和大家分享自己的学习过程,可能有的东西写的比较幼稚……哈哈没事主要是学习!第一篇数组与指针的部分区别1、首先对于编译器而言,一个数组是一个地址,一个指针是一个地址的地址。数组中保存数据,指针保存地址;利用数组直接访问数据,利用指针间接的访问数据(先取得指针的内容,然后以它为地址,取得数据 )具体解释如下:

2、chara[]="abcdefg";---------------1char*p="abcdefg";-----------------2上面的a和p有什么区别呢?首先看下计算机中对变量是如何存储的。从编译原理中我们知道,对于所有的变量他都会影射到一个符号表中。为了简化,这里给出一种最简单的便于理解的符号表:a0xffaap0xffcc表1一个简单的符号表示例以上表格中a代表一个变量,0xffaa则为变量a的内容的存储地址;p代表另一个变量,0xffcc为变量p的内容的存储地址。对于数组型的变量和指针型的

3、变量,其地址代表的含义不同。²对于数组a:这个0xffaa地址就是其存放数组内容的首地址了。对于a[i]的引用步骤如下:l步骤一、取出i的值,将他与0xffaa相加;l步骤二、取出为(0xffaa+i)中的内容。²对于指针p:这个0xffcc地址就是中存放的不是字符串的内容,而是一个地址,这个地址才是字符串的首地址,对p[i]或者用指针表示*(p+i)的应用步骤如下:l步骤一、取出0xffcc地址中的内容,例如为0xffdf;l步骤二、取出地址0xffdf中的内容。下面是在VC6.0下作的一个试验,通过这

4、个试验大家可以看到,虽然同过[]和通过*引用都一样,但在内部处理的方法是不一样的。4#include"stdafx.h"#include"stdio.h"intmain(intargc,char*argv[]){    inta[3]={1,2,3};    int*p=a;   printf("a:%d,&a:%d,a[0]:%d,*a:%d,p:%d,&p:%d,*p:%d,p[0]:%d",a,&a,a[0],*a,p,&p,*p,p[0]);    return0;}输出结果:a:1310580,

5、&a:1310580,a[0]:1,*a:1,p:1310580,&p:1310576,*p:1,p[0]:1。通过下面的也可以直观的对其了解:注意:a=0xD2D61000 在符号表中,为一常量,并不占用内存空间。&a应该是没有意义,在vc6下,&a=a=0xD2D61000b=0xD2D61000 在内存中,为一变量,占用4个字节,&b=0xD2D60080 注意:"hello"不是常量字符串,是可被修改的。2、内存分配方式不同数组通常用于存储固定数目数据类型相同的元素,主要在栈中分配内存;指针通常用

6、于动态数据结构,一般在堆上对数据进行动态分配。数组内存使用后,由编译器自动释放;指针动态分配后需要自行释放。栈是系统提供的功能,特点是快速高效,缺点是有限制,数据不灵活;而栈是函数库提供的功能,特点是灵活方便,数据适应面广泛,但是效率有一定降低。4上述两点大额区别可以用下表来表示:表2指针与数组的区别指针数组保存数据的地址保存数据间接访问数据直接访问通常用于动态数据结构通常用于存储固定数目数据类型相同的元素相关操作malloc(),free()等隐式分配和删除3、数组与指针本身和内容是否可修改不同数组名对

7、应着(而不是指向)一块内存,声明一个数组时,编译器会根据数组中元素的个数为其分配空间,其地址与容量在生命期内保持不变。数组名存放在符号表中,该值为数组的起始地址,为常量,不能被修改,数组的内容可以改变!初始化指针是所创建的字符串时常量,被定义为只读。指针它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容(字符串的值)是不可以被修改的,如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。例如:intmain(intargc,char*argv[]){chara[]="abcd

8、efg";//---------------数组内容能修改(字符数组),数组名本身不能改变char*p="acd";//-----------------内容不能修改(字符串常量),但指针p可以++或--变化a++;//编译时报错p++;//正确a[1]='g';//正确*p++='g';//编译不报错,但执行时出现内存不能写的错误return0;}4、内容的复制和比较不能对数组进行字节复制和比较,对于两个数组a,b,不能用b

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。