一维数组------指针引用一维数组

 一维数组的存储

#include <stdio.h>
int main()
{
	int arr[8];
	int i,Num;
	for(i=0;i<8;i++)
	{
       
        printf("大小为:%d\n",sizeof(int));
		printf("&arr[%d]=%p\n",i,&arr[i]);
	} 
}
大小为:4
&arr[0]=000000000061FDF0
大小为:4
&arr[1]=000000000061FDF4
大小为:4
&arr[2]=000000000061FDF8
大小为:4
&arr[3]=000000000061FDFC
大小为:4
&arr[4]=000000000061FE00
大小为:4
&arr[5]=000000000061FE04
大小为:4
&arr[6]=000000000061FE08
大小为:4
&arr[7]=000000000061FE0C

由上可以看出int占用四个字节,元素arr[i+1]的地址等于arr[i]的地址+sizeof(int)

这说明一维数组中的元素在栈区空间中是顺序存储的。

接下来通过指针访问数组元素:1、指针访问数组地址进行2、通过赋值

方式1:访问数组地址

#include <stdio.h>
int main()
{
	int arr[5];
	int *p,i;
    printf("请输入arr:");
    for ( i = 0; i <5; i++)
    {
        scanf("%d",&arr[i]);
        /* code */
    }
    
	for(i=0;i<5;i++)
	{
		p=&arr[i];
		printf("p=%d   ",*p);
		printf("arr[%d]=%d\n",i,arr[i]);	

	}
	
}

注意:指针指向的是元素的地址,数组名代表数组在内存的首地址p=arr与p=&arr[0]等价

方式2:通过赋值

#include <stdio.h>
int main()
{
	int arr[5]={1,3,5,7,9};
	int *p,i;
  
    
	for(i=0;i<5;i++)
	{
		p=arr;
        printf("p=%d  ",*p);

		printf("arr=%d   ",*arr);
        printf("*(p+1)=%d  ",*(p+1));
        printf("*p+1=%d  ",*p+1);
		printf("arr[%d]=%d\n",i,arr[i]);	

	}
	
}

 输出:

可看到*p==arr[0]       *(p+1)==arr[1]

p=1  arr=1   *(p+1)=3  *p+1=2  arr[0]=1
p=1  arr=1   *(p+1)=3  *p+1=2  arr[1]=3
p=1  arr=1   *(p+1)=3  *p+1=2  arr[2]=5
p=1  arr=1   *(p+1)=3  *p+1=2  arr[3]=7
p=1  arr=1   *(p+1)=3  *p+1=2  arr[4]=9

区别:*(p+1)与*p+1

        *的优先级高于+,*p+1是指针的结果加一;*(p+1)是先将地址后移一个,再解引用,取地址(p+1)的结果,sizeof(*(p+1))=4,所以*(p+1)是先将地址后移一个,数组中的下一个元素。

规律:*(p+1)==arr[1]=>*(arr+1)  *p==arr==*(arr+0) 因为相等,所以两边同时去*=> p==arr

arr[0]==*p   arr==*p 由上两式=>arr==arr[0]

  1. *p+i的结果是:*p的值(arr或者arr[0])+ i 的结果;
  2. arr[i]是通过数组访问元素的结果;
  3. 是*(p+i)是通过指针p访问元素的结果;
  4. *(arr+i)是我们通过结果,找出数组与指针之间关系的结果
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值