码迷,mamicode.com
首页 > 其他好文 > 详细

指针小结

时间:2015-06-28 21:22:25      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

1.指针与左值、右值

      在C++中有左值与右值之分,弄清楚它们的关系和区别很重要。当一个对象用作左值时用的是对象的身份(即其内存),当一个对象用作右值时用的是对象的值(即内容)。

例如:

       int a = 5,b = 6;

       a=b;   //a是左值,用的是a在内存中的位置

                 //b是右值,用的是b的值,即6

取地址符作用于一个对象时取这个对象的地址,返回一个指向此对象的指针。所以取地址符作用一个左值对象,返回值是指针,而指针是一个右值。解引用运算符求值结果是左值。

例如:

      int *p;

p的类型为int*,因为解引用运算符生成左值,所以decltype(*p)的结果是int&;因为取地址符生成右值,所以decltype(&p)的结果是int**,所以结果为一个二级指针。

2.指针函数与函数指针

      指针函数是函数,就是一个返回指针的函数;函数指针是指针,就是指向函数的指针。两者在形式上很相像,初学者很容易混淆。

例如:int* function();  //指针函数,返回类型为int型指针

         int (*pointer)();//函数指针,指向返回类型为int,无形参的函数

函数指针一定不能漏掉括号,漏掉后就成了指针函数了。因为函数调用运算符(即())优先级比解引用运算符(即*)高,所以表达式int* function()中function先与()结合,说明function是一个函数,返回类型为int*;而在第二个表达式int (*pointer)()中,*pointer倍括号括起来了,所以pointer是一个指针,指向一个函数,此函数返回值为int。

         由于在程序中多次声明函数指针比较麻烦,所以函数指针多用类型别名。

例如:typedef int (*pointer)();  这条语句声明了一个指向返回类型为int且无形参的指针类型,类型名为pointer。int (*pointer)()中的pointer本来是一个指针变量,但加上typedef后就成了类型名,可以用pointer声明变量。例如:pointer ptr; ptr是一个指向返回值为int型且无形参的函数指针。

未完待续...

 

指针小结

标签:

原文地址:http://www.cnblogs.com/yibo141/p/4606078.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!