C++ 指针类型

chenwei9120 2013-06-11 06:58:46
请问下面这个表达式返回的是函数指针类型吗?
(int*)*(int*)(&b)
...全文
367 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
wchen9120 2013-07-31
  • 打赏
  • 举报
回复
中间无非就是整数和指针的转换,(int*)(&b)应该是个整数,就是b的地址所含的数字,再通过最前面的(int*)*强制转换成一个指针。
vcorange 2013-06-27
  • 打赏
  • 举报
回复
(int*)*(int*)(&b) == 指向b的值的地址 (int*)(&b) 得到 一个指向b 的临时指针 * 解引用 该临时指针 的 b的值 (int*)b
avcodec-decoder 2013-06-26
  • 打赏
  • 举报
回复
引用 楼主 chenwei9120 的回复:
请问下面这个表达式返回的是函数指针类型吗? (int*)*(int*)(&b)
最终等价于(int *)b;
  • 打赏
  • 举报
回复
我擦。这是在做考试题? 写程序的时候谁会这么写。
  • 打赏
  • 举报
回复
按照“int p1=&b;//出错,cannot convert from 'int ** ' to 'int' ”这句来理解, &b得到的是一个指针的指针, (int *)(&b)是把第一层指针(这样说好像有点怪)整数化? *(int *)(&b)获得第一层指针的指向的值也就是第二层指针, (int *)*(int *)(&b)把第二层指针整数化, int *p2 = (int *)*(int *)(&b)这句应该就是把指针p2的地址指向第二层指针 最后的结论是(亲自调试过): int *p2 = (int *)*(int *)(&b)等价于 int *p2=b 我跟大家一样,这是吃饱了撑着
  • 打赏
  • 举报
回复
int a=2; int *b=&a; // int p1=&b; //出错,cannot convert from 'int ** ' to 'int' // int p1=(int*)(&b); //出错,cannot convert from 'int *' to 'int' int p1=*(int*)(&b); int *p2 = (int *)*(int *)(&b); cout<<"p1="<<p1<<endl; //1245052 cout<<"*p2="<<*p2<<endl; //2
  • 打赏
  • 举报
回复
看了楼上的例子,*p最终又回到2,感觉就是指针太坑爹了
狼异族 2013-06-19
  • 打赏
  • 举报
回复
void main() { int a = 2; int *b = &a; int *q = (int *)(&b); int *p = (int *) * (int *) (&b); printf("%d\n", *q); printf("%d\n", *p); } 执行结果: 1244996 2
傻X 2013-06-18
  • 打赏
  • 举报
回复
我个人认为就是指向地址,那个地址为编号就是b值啊
华美乐章 2013-06-18
  • 打赏
  • 举报
回复
就是(int*)b 么
afairycell 2013-06-17
  • 打赏
  • 举报
回复
(int*)这个是强制转换好不?去掉你就懂了
深圳老码农 2013-06-17
  • 打赏
  • 举报
回复
引用 7 楼 SXJIAKE 的回复:
跟(int*)(&b)没区别。实在不知道“(int*)*(int*)”左边“(int*)*”多此一举是想干啥?
感觉上不能说是左边“(int*)*”多此一举 最终类型靠左边决定。 (int*)(&b) b可以是变量的吧 (int*)*(int*)(&b) b是指针 把地址转换为(int*)不知道对最终结果是否有影响 等待大能
「已注销」 2013-06-17
  • 打赏
  • 举报
回复
引用 9 楼 yxwsbobo 的回复:
瞎说和 (int*)(&b) 不一样
引用 10 楼 shui0527 的回复:
感觉上不能说是左边“(int*)*”多此一举 最终类型靠左边决定。 (int*)(&b) b可以是变量的吧 (int*)*(int*)(&b) b是指针 把地址转换为(int*)不知道对最终结果是否有影响 等待大能
才发现确实自己看错了,那玩意儿不是可有可无的。
dahaiI0 2013-06-17
  • 打赏
  • 举报
回复
1,2L正解。
「已注销」 2013-06-17
  • 打赏
  • 举报
回复
引用 10 楼 shui0527 的回复:
[quote=引用 7 楼 SXJIAKE 的回复:] 跟(int*)(&b)没区别。实在不知道“(int*)*(int*)”左边“(int*)*”多此一举是想干啥?
感觉上不能说是左边“(int*)*”多此一举 最终类型靠左边决定。 (int*)(&b) b可以是变量的吧 (int*)*(int*)(&b) b是指针 把地址转换为(int*)不知道对最终结果是否有影响 等待大能[/quote] 在32位系统上,最左边的 (int*)* 是无所谓了,64位的话就变成一个32位指针了。 其他确实没啥影响,都是一样的。
keary093 2013-06-16
  • 打赏
  • 举报
回复
不知道最前面的(int*)*是想干什么~后面那一部分则是把b的地址强行转成int指针。
yxwsbobo 2013-06-16
  • 打赏
  • 举报
回复
瞎说和 (int*)(&b) 不一样
「已注销」 2013-06-15
  • 打赏
  • 举报
回复
跟(int*)(&b)没区别。实在不知道“(int*)*(int*)”左边“(int*)*”多此一举是想干啥?
worldy 2013-06-15
  • 打赏
  • 举报
回复
引用 楼主 chenwei9120 的回复:
请问下面这个表达式返回的是函数指针类型吗? (int*)*(int*)(&b)
如果不论转换的结果是否有效,结果的类型看最最左边的那个转换
jaynaviee 2013-06-15
  • 打赏
  • 举报
回复
加载更多回复(4)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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