今天萌新博主来给大家介绍C语言指针中指针与数组部分,在这一块也是非常难以理解的,闲言少叙,咱们开始吧!
大家都知道数组与指针有着紧密的联系,数组是由一组若干个元素构成,我们在访问数组的时候,采用的是循环体的方式,就是把数组的下标逐步的循环一次,这样我们就可以读出所有数组元素的值。那么重点来了,数组下标与地址的之间的关系,如果我们掌握好,大家学起来指针与数组就会非常的吃力,萌新博主与大家也是感同身受啊!
【数组的存储方式】
数组的三个特点:
1.数组有若干个元素
2.元素的数据类型必须相同
3.数组中的数据元素是有序排列的
arr1[4]={1,2,3,4}
arr2[4]={4,3,2,1}
//这两个数组不一样
数组元素占用的字节长度都是相等的;
指向数组的指针的初始值就是数组的首地址;
int arr[4]={1,2,3,4}
每个元素占用的字节长度为:sizeof(int);
若sizeof(int)==2,假设数组的第一个元素a[0]的地址为0x00000001,则数组的第二个元素a[1]的地址为0x00000003,则数组的第三个元素a[2]的地址为0x00000005
所以说数组中的数据元素是有序排列的,那我们在查找数组元素的时候,只需要查找到第一个元素的地址,就能按照顺序找到相应的元素了。
#include
int main(void)
{
int arr[4]={1,2,3,4};
printf("arr[0]=%p\n",&arr[0]);
printf("arr[1]=%p\n",&arr[1]);
printf("arr[2]=%p\n",&arr[2]);
printf("arr[3]=%p\n",&arr[3]);
return 0;
}
运行结果:
那我们再来看指针的性质:
【指针与整数的运算】
指针加n=指针原来的值+n*sizeof(指针所指变量类型)
指针减n=指针原来的值-n*sizeof(指针所指变量类型)
int *p=NULL
p=&arr[0]
p=0x000001
p+1=0x000001+1×sizeof(int)
p+2=0x000001+2×sizeof(int)
p+3=0x000001+3×sizeof(int)
#include
int main(void)
{
int arr[4]={1,2,3,4};
int *p=NULL;//声明一个指针
int i=0;
p=&arr[0];//等价于p=arr;
printf("sizeof(int)=%d\n",sizeof(int));
printf("arr[0]=%p\n",&arr[0]);
printf("arr[1]=%p\n",&arr[1]);
printf("arr[2]