数组和指针的区别

来源:互联网 发布:如何正确看待体检数据 编辑:程序博客网 时间:2024/06/05 06:40

数组和指针的区别和联系;

在下面这段代码中:

#include <stdio.h>
void main()
{
int ar[10] = {0,1,2,3};
int *p1 = ar;
int *p2 = &ar[0];
printf("%d %d %d %d %d\n",*(p1+1),*(ar+1),ar[1],1[ar],p1[1]);
}

运行结果:

1 1 1 1 1

这四种写法都指向了数组中的第二个元素;

数组名和指针在这种情况下是可以混用的;ar[1]、p1[1]两者是等价的。

C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。

数组就是一个指针,指针也可以像数组那样用使用中括号的方式来进行内存访问。

    一个数组名就代表一个数组对象,这个对象内可以有一个或多个元素,每个元素类型都相同;数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。

指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。

不能对数组名进行直接复制与比较。若想把数组a的内容复制给数组b,不能用语句b = a ,否则将产生编译错误。应该用标准库函数strcpy进行复制。同理,比较ba的内容是否相同,不能用if(b==a)来判断,应该用标准库函数strcmp进行比较。

语句p = a 并不能把a的内容复制指针p,而是把a的地址赋给了p。要想复制a的内容,可以先用库函数mallocp申请一块容量为strlen(a)+1个字符的内存,再用strcpy进行字符串复制。同理,语句if(p==a)比较的不是内容而是地址,应该用库函数strcmp来比较。



原创粉丝点击