指针章节总结

1 指针的定义

   普通指针:

int val=0;
int*p=&val;

数组指针:

int arr[3];
int(*p)[3]=&arr;

此时p+1的偏移量为12个字节(&arr,arr,&arr[0]都是数组的地址,不同的是它们指针的偏移能力      ,&arr[0]偏移量为一个字节,&arr在这里为12个字节)。

函数指针:

int add(int a,int b);
int(*p)(int,int)=add;

 p表示为函数的地址,引用p即为引用函数,即p(1,2)=add(1,2)。

2 指针的使用

  普通指针:

int val=0;
int*p=&val;
*p=1;

数组指针:

int arr[3]={1,2,3};
int(*p)arr[3]=&arr;

p是指向arr[3]的指针,其指针加1的偏移量为12个字节。

试分析*((int*)(p+1)-1)的访问值

分析:p+1为数组结尾的地址,(int*)(p+1)将该指针强转为指向int*的指针,使指针偏移量发生改变,由12个字节转变为4个字节,则(int*)(p+1)-1的地址为[2]结尾的地址,故*((int*)(p+1)-1)的访问值为3。

3 判断大小端问题

int val=ox12345678;
int a=0;
int*val=p;
char*q=(char*)p;
a=*p;

若a=12说明数据存储方式为大端,若a=78,则为小端。

4 指针加减能力

指针+1或者-1的能力与它所指的数据类型有关,所指的数据类型为几个字节,那么偏移量就是该字节的整数倍。

指针-指针表示的是相差多少个数据,而不是指的字节。

5 指针数组

指针数组重点在于数组,即数组成员为指针的数组。

例如:const char*str[3]={"abc","bcd","asd"}

6 const与指针的结合

const可以对变量声明只读特性,保护变量值以防被修改,此外const也起到节省空间以及提高程序运行效率的作用。

const int val=10;

此时val为不可修改,且通过val的地址也不能修改它,故在定义指针时需将*p设置为常量,以保证val不会被修改,即

int const*p=&val;

const int*p=&val;

如果对一个指针使用const,例

int *const p=&val;

此时说明指针p无法被修改,但val却可以被修改,因为val没有被const修饰。

既然p无法被修改,那么*q也无法被修改(q=&p),那么在定义二级指针时需要用const修饰*q

int *const*q=&p;

同理有const与三级,四级等指针的结合。 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值