指针笔记

基本概念:

指针是存储了一个内存中的变量,主要需要理清楚四个方面的内容:
1、指针的本身类型
2、指针指向区域的内容(指针指向的区域会被解析成为特定的类型)
3、指针指向的内容区
4、指针本身所占的内容区

1、指针的本身类型

来,首先第一点,指针本身的类型,这个问题比较费解的地方在于,指针只是一串内存的地址而已,本身的类型的意义在哪儿? 简单来说,其实和使用变量的时候需要申明类型一样,因为指针同变量一样需要进行一些变量的运算,在运算的过程中就会涉及到不同的类型,举个栗子:

    int *ptr = a[10];
    ptr=ptr+1;

我们熟悉的这个栗子中,ptr++的操作实现了指向数组的下一个值(a[1]),其实在编译器中,ptr实际上是加上了sizeof(int)的值,也就是加上了4个字节,即ptr在原来的地址上向高位地址移动了四个字节。

下面是分辨指针类型的方法:

    int *ptr; //指针的类型是int *  
    char *ptr; //指针的类型是char *  
    int **ptr; //指针的类型是 int **  
    int (*ptr)[3]; //指针的类型是 int(*)[3],即int的指针数组类型
    int *(*ptr)[4]; //指针的类型是 int *(*)[4] ,即指向 int的指针数组  的指针 

就是把变量名去掉,这么简单啦啦啦啦啦

2、指针指向的数据类型
int *ptr; //指针所指向的类型是int  
char *ptr; //指针所指向的的类型是char  
int **ptr; //指针所指向的的类型是 int *  
int (*ptr)[3]; //指针所指向的的类型是 int()[3]  
int *(*ptr)[4]; //指针所指向的的类型是 int *()[4]

简单的说就是去掉变量和变量左边的* 指针符号

3、指针本身所占据的内存

在32位平台里,指针本身占据了4个字节的长度。指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。

4、运算符&和*

&:取地址运算符
* 间接运算符

&a的意思很好理解,就是a的存储内容的地址,即&a就是一个指针

*p的运算结果就五花八门了。总之*p的结果是p所指向的东西,这个东西有这些特点:它的类型是p指向的类型,它所占用的地址是p所指向的地址。

int a=12;  
int b;  
int *p;  
int **ptr;  
p=&a;//&a的结果是一个指针,类型是int*,指向的类型是int,指向的地址是a的地址。  
*p=24;//*p的结果,在这里它的类型是int,它所占用的地址是p所指向的地址,显然,*p就是变量a。
ptr=&p;//&p的结果是个指针,该指针的类型是p的类型加个*,在这里是int**。该指针所指向的类型是p的类型,这里是int*。该指针所指向的地址就是指针p自己的地址。 
*ptr=&b;//*ptr是个指针,&b的结果也是个指针,且这两个指针的类型和所指向的类型是一样的,所以?amp;b来给*ptr赋值就是毫无问题的了。
**ptr=34;//*ptr的结果是ptr所指向的东西,在这里是一个指针,对这个指针再做一次*运算,结果就是一个int类型的变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值