数组和指针的区别.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:2 大小:12KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

数组和指针的区别.doc

数组和指针的区别.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

数组和指针的区别首先对于编译器而言,一个数组是一个地址,一个指针是一个地址的地址。数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。例如:voidmain(void){inta[10];a++;//error,aisleftvalue,butcan'tbechanged.}指针可以随时指向任意类型的内存块,远比数组灵活,但也更危险。下表是指针和数组一个简单的比较数组和指针的特点数组指针保存数据保存地址直接访问数据间接访问数据,先取得指针的内容,然后以它为地址,取得数据用于存储数目固定且类型相同的数据通常用于动态数据结构由编译器自动分配和删除动态的分配和删除,相关函数为malloc()和free()自身即为数据名通常指向隐式数据1、指针和数组都可以在初始化的时候赋予字符串常量。尽管看上去一样,底层机制却不同。指针在定义的时候,编译器并不会为指针所指向的对象分配内存空间,它只是分配指针变量的空间。除非以一个字符串常量对其进行初始化。下面的定义创建了一个字符串常量(为其分配了内存空间)char*p="abcd";在ANSIC中,初始化指针时所指向的字符串被定义为只读,如果想通过指针修改字符串的时候,会产生未定义的行为。数组也可以用字符串常量进行初始化,但是其内容可以被修改。2、内容的复制和比较不能对数组进行字节复制和比较,对于两个数组a,b,不能用b=a进行复制,而应当使用标准库函数strcpy()。也不能使用if(b==a)进行比较,应当使用strcmp()。而对于指针p,如果要想将数组a中的内容复制,要先申请一块内存区域,然后使用strcpy()进行拷贝。voidmain(void){chara[]="hello";charb[10];strcpy(b,a);//can'tuseb=a;if(strcmp(b,a)==0);//can'tuseif(b==a)char*p=NULL;p=(char*)malloc(sizeof(char*)*(strlen(a)+1);strcpy(p,a);if(strcmp(b,a)==0);}3、计算内存容量用运算符sizeof()可以计算出数组的容量(字节数)。如下例chara[]="abcdef";char*p=a;sizeof(a)=7;sizeof(p)=4;//sizeof(p)equaltosizeof(char*)=4注意当数组名作为函数参数进行传递时,该数组自动退化该类型的指针,如下例:voidTEST(chara[100]){cout<<sizeof(a)<<endl;//inthisplace,sizeof(a)isequaltosizeof(char*)=4}个人观点:本来想再写一些关于指针和数组的相同之处,但是我觉得对于二者讨论的太多反而会让人更加模糊二者该如何使用,陷入到理论的牛角尖中。如果大家非要搞清楚的话,可以参考《C专家编程》。只要我们可以正确的使用,就没有必要太深究吧,有时候钻的越深,反而越不知如何使用。