郁闷的p=(int *)i;与p=(int *)&i;

erictb 2005-03-31 07:43:28
#include "stdio.h"
void main()
{
int i[]={2,3};
int *j=i;
int **k=&j;//双指针,正确;
int *p=NULL;

// k=&i; //i就表示一个数组地址,&i也表示双指针,为什么这里出错?
//提示cannot convert from 'int (*)[2]' to 'int ** '
//int (*)[2]应该是数组指针吧?比如int (*c)[2];c=arry[3][2],在这里c也是当作双指针来用的啊~

// i=(int *)&i;//提示cannot convert from 'int *' to 'int [2]'
// k=(int *)&i; //提示cannot convert from 'int *' to 'int ** '
// k=(int *)i;//提示cannot convert from 'int *' to 'int ** '

p=(int *)i;
p=(int *)&i;
//这里的两个强制转换都可以,在这里&i和i到底有什么区别?难道&没有用吗?


}

//还有我在其他地方也看到这个情况,比如mfc的库文件里面经常有这样的表达。
//比如:
//pArgList = (char *) &szFormat + sizeof (szFormat)
//这里的szFormat为char * 类型。

//又比如:函数指针的转换(int (*)(void))copy 和 (int (*)(void))© 有什么区别吗?
...全文
209 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjiaming 2005-04-01
  • 打赏
  • 举报
回复
i=(int *)&i;//提示cannot convert from 'int *' to 'int [2]'
这句肯定是错的,因为i作为一个数组名,虽然是一个指针,但却是一个常量指针,不能给它赋值
k=(int *)&i; //提示cannot convert from 'int *' to 'int ** '
这句也是错的,因为&i已经是int**的了,再加一个(int**)反而弄巧成拙了
k=(int *)i;//提示cannot convert from 'int *' to 'int ** '
这句也是错的,k是(int**)型的,不能由(int*)转换
erictb 2005-03-31
  • 打赏
  • 举报
回复
i(它是数组的名称),也是一个指针啊~它的类型是int * ,再取一次&,不就成int **了?
4inSky 2005-03-31
  • 打赏
  • 举报
回复
*k = (int *)(&i);

//i表示一个数组,先取的i的地址(&i),然后在付给K值,因为K是指向指针的指针.
//所以*k中保存的是一个int类型的指针,因此需要使用(int *)强制转换.

*是取内容,&是取地址.

16,551

社区成员

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

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

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