C语言中经常会用到这两个东西,指针,数组。下面我从值,内存分配,访问形式这几个方面来分析一下这两个区别。
值及内存分配。
指针时一个变量,在32位系统下,它的大小永远是4个byte,指针的值是地址,它通过保存指针所指向对象的首地址来访问这个对象。
例如:
#include<stdio.h>
int main()
{
int a=1;
int *p=&a;
printf("%d",*p);
return 0;
}
这里有三个概念:*p,p,&p;(一定要分清楚这三个概念,不然在以后学习中会遇到许多困难)
*p------->指针所向对象的值;(a)
p-------->指针所指向对象的首地址;(&a)
&p--------->指针本身的地址;(&p)
数组,你可以把它想象成学校澡堂的储物柜,每一个柜子都有自己的编号,你可通过编号来找到任何一个柜子。数组下标的道理与这个相同,不过数组下标是从0开始。
数组的大小与它所存储元素的类型,个数有关。定义数组时必须指明它的元素类型和元素个数。定义好之后,它的大小是不能修改的。
数组可以存储任何类型的数组,不包括函数。
#include<stdio.h>
int main()
{
int a[3]={1,2,3};
int a[]="abcd";
return 0;
}
这里要记住,数组名就是数组首地址,请自行查阅 &a与a的区别。
访问形式
下面这部分内容可能比较难懂,指针可以以下标的形式访问指针的元素,,数组也可以用指针的形式访问数组的元素。
读下面函数:
#include<stdio.h>
int main()
{
char *p="abcdef";
char arr[]="abcdef";
printf("%c\n",*(p+1));
printf("%c\n",p[1]);
printf("%c\n",arr[1]);
printf("%c\n",*(arr+1));
return 0;
}
当你执行这个程序的时候,会发现运行框里会输出4个b。