6.2 指针-引用数组

一、定义一个指针变量指向数组:

int *p = &a[0];

C语言中数组名代表数组中首元素的地址,因此还可以写成

int *p = a;

二、指针增量和数组的关系

指针加1,就是让指针往下偏移一个单位,单位的大小由其数据类型决定。

int array[3]={1,2,3};
int *p;
p = array;
printf("元素的地址为:%p,值为%d",p,*(p));
printf("元素的地址为:%p,值为%d",p+1,*(p+1));
printf("元素的地址为:%p,值为%d",p+2,*(p+2));

例外一种写法:printf("%d",*p++); *p优先级更高,之后进行p++操作。在进行完这项操作后,如果下面要重新调用指针偏移,要注意将指针变量重新回到首元素:p = array[0];

输出结果:

0元素的地址为:000000000061FE0C,值为1
1元素的地址为:000000000061FE10,值为2
2元素的地址为:000000000061FE14,值为3

这里的p指针变量为int型,每次偏移内存大小为4个字节。

三、通过指针引用数组元素

1.取下标

2.指针法:

①偏移

②取内容

见怪不怪:

指针当做访问名

#include <stdio.h>
int main(){
	int array[3]={1,2,3};
	int *p;
	p = array;
	
	printf("%d",p[2]); //指针变量p当做数组名,对数组进行访问
	return 0;
}

数组名访问偏移:printf("%d\n",*(array+1));

数组名和指针的区别:

指针变量可以自加如:p++,但是数组名不能自加

指针变量:保存地址的变量,保存的地址可改

常量指针:数组开拓的内存空间固定

printf("%d",*array++); //编译不通过,指针常量

sizeof 关键字表示占用的内存大小:

指针变量:无论什么类型都用8个字节表示

数组:元素个数x一个数据类型内存大小

printf("sizeof array is %d\n",sizeof(array));
printf("sizeof p is %d\n",sizeof(p));

结果: 

sizeof array is 12
sizeof p is 8

3.取下标和指针法的效率对比:系统对数组变量进行访问时,指针的访问效率远远大于数组名的访问效率,但是只有指针正确访问时,才比下标访问更有效率。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值