小白笔记2---指针

参考原文 https://blog.csdn.net/u014253332/article/details/89179134

要理解一个指针首先要明白它的定义:

若有一个变量专门用来存放另一个变量的地址,那个它称为指针变量;指针变量里存放的是指针;

注意区分指针变量和指针,在程序中,*表示指向;如果定义ptr为指针变量,那么*ptr就是指针变量ptr中存放地址所指向的存储单元中的数据.

读懂指针要明白 指针的类型;指针所指向的类型;指针的值;指针本身的内存区.

在复杂的指针运算中,常常含有多个运算符号,例如:int**ptr; int*(*ptr),因此要先明确运算符的优先级

()圆括号;[]数组下标; ->成员选择(指针); .成员选择(对象) 四类属于最高优先级

其次为 (type)强制类型转换; ++自增; --自减; *取值运算符(指针类型表达式);&取地址运算符; !逻辑非; ~按位与

再其次为算数运算符,例如乘*(当*表示乘和表示指针时处于不同优先级);除/;取余%;加+;减-;

再往后的与指针关系不大,不再这里详细写.

遇到一个指针,首先根据他的运算顺序,确定它是什么,其次根据下一个结合顺序判断它指向什么,或指向的类型是什么,如下为常见的几种指针类型:

int *ptr;        //ptr与*结合,所以它是一个指针;   然后与int结合,说明指针指向的内容类型是int型;   即ptr是一个指向int型数据的指针.

int *ptr[2];    //根据优先级ptr先与[]结合,所以它是一个数组; 再与*结合;说明数组的元素为指针类型;再与int结合,说明指针指向的内容是int型;   即ptr是由返回int型数据的指针组成的数组.

int (*ptr)[2];   //根据优先级()圆括号[]方括号处于同一优先级,那么依据从左到右依次结合,ptr先与*结合,所以它是一个指针; 再与[]结合,说明指针所指向的内容是数组; 再结合int,说明数组的元素是int型数据

        //即ptr是一个指向由int型数据组成的数组.

int**ptr;      //先与*结合,说明它是一个指针; 再与另一个*结合,说明它指向的元素是指针; 再与int 结合,说明它指向的那个指针所指向的内容类型是int型

int ptr(int);  //ptr是一个函数.int为参数类型

int (*ptr)(int);   //由于利用()改变优先级,先与*结合,说明ptr是指针,再与()结合,说明指针指向一个函数,该函数有一个整型的参数,函数的返回类型是整型,即ptr是一个指向返回类型为整型参数为整型的函数的指针.

指针的类型:把指针声明中的指针名字去掉即可(eg:int *ptr //去掉ptr,  int*即为指针的类型)   !!!!很重要

指针指向的类型:把指针声明中指针的名字去掉,以及名字左边的*去掉即可,不要去掉括号(eg: int (*ptr)[2]  //去掉ptr得到int(*)[2];去掉ptr左侧的*为int ()[2],即为指针指向的类型)

指针的运用:

1.指针变量或者指针常量的值,往往可以由一个取地址符(&)作用在一个变量或者常量的符号上而获得.(常量也是可以的!)

eg int const ptr = 1234;

     int const *ptr1=&ptr;

或 int const ptr = 1234;

    int const *ptr1;

   ptr1=&ptr ;

(变量类似)

2.指针量的值,除了有1得到,还可以有1得到的量再经果加减的指针运算赋予

3.在声明指针量符号时,必须同时给出某种数据类型,这个类型必须和指针将来指向的符号在被声明时所设置的数据类型完全一致.

注意,谨慎使用指针

猜你喜欢

转载自www.cnblogs.com/ssherry/p/12120182.html