关于指针,新手疑惑(请高手帮下,因为还没搜索到类似的帖,谢谢)

huejim 2011-05-19 12:36:45
为什么函数指针可以省略*号,而普通指针必须要带*号呢

函数指针int (*p1)();和普通指针int* p2=&a;
在调用的函数指针的时候直接用p1();即可
而调用普通指针的时候必须要用*p呢

...全文
55 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2011-05-19
  • 打赏
  • 举报
回复
为什么一个用,一个不用,道理很简单,就是看你想做什么。

大多数情况,对于变量,我们希望求值,而不是得到地址。

对于函数,我们要调用,需要地址,而不是值。
threenewbee 2011-05-19
  • 打赏
  • 举报
回复
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
cout << *_tmain;
return 0;
}

实际上你也可以对函数使用指针运算。
huejim 2011-05-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 caozhy 的回复:]

实际上以下代码也合法。
int *p = &a;
int b = p; // b 保存的不是地址p的值,而是p这个地址。
[/Quote]

是的,这样赋值是可以,可是输出的时候*p2和p2是不一样的,是个是数据,一个是地址
threenewbee 2011-05-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huejim 的回复:]
引用 1 楼 caozhy 的回复:

* 有两个作用:(1)申明一个指针变量;(2)根据指针,求它对应的数据。

你说的 int *p = &amp;a; int b = *p; 前后两个星含义不同。


谢谢,

1申明指针变量我知道

2可是上面的都是你所说的求对应数据的,为什么函数可以省,其实也可以不省,但是普通的指针为什么必须得要带*。。。
[/Quote]
看2F。
huejim 2011-05-19
  • 打赏
  • 举报
回复
改正下
为什么函数指针可以省略*号,而普通指针必须要带*号呢

函数指针int (*p1)();和普通指针int* p2=&a;
在调用的函数指针的时候直接用p1();即可
而调用普通指针的时候必须要用*p2(这地方刚少个2)呢
huejim 2011-05-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 caozhy 的回复:]

* 有两个作用:(1)申明一个指针变量;(2)根据指针,求它对应的数据。

你说的 int *p = &a; int b = *p; 前后两个星含义不同。
[/Quote]

谢谢,

1申明指针变量我知道

2可是上面的都是你所说的求对应数据的,为什么函数可以省,其实也可以不省,但是普通的指针为什么必须得要带*。。。
threenewbee 2011-05-19
  • 打赏
  • 举报
回复
实际上以下代码也合法。
int *p = &a;
int b = p; // b 保存的不是地址p的值,而是p这个地址。
threenewbee 2011-05-19
  • 打赏
  • 举报
回复
* 有两个作用:(1)申明一个指针变量;(2)根据指针,求它对应的数据。

你说的 int *p = &a; int b = *p; 前后两个星含义不同。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧