大虾们看看这道题吧

farfly_yu 2005-04-10 02:23:06
main()
{
int a[]={1,2,3,4,5};

int *p = (int*)(&a+1);
print("d%",*(p-1));

}

结果是什么啊?菜鸟的问题!还有,为什么要加个(int*)强制转换呢,a本来就是int啊

void func(b[][])
{
++b;
b[1][1]=9;
}
main()
{
int a[][3]={1,2,3,4,5,6,7,8,9};
func(a);
print("d%",a[2][1]);

}
这结果又是什么呢?
















































































}
...全文
129 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
songjie2004 2005-04-10
  • 打赏
  • 举报
回复
&a 这个应该是a的引用,所以 &a+1 以后,指针就指向5的后面,所以*(p-1)的值是5。同样,在func函数里,++b使指针指到了4的位置,赋值后就是9了。
vcmute 2005-04-10
  • 打赏
  • 举报
回复
a int[5]
&a int*[5]
所以需要转换,否则
error C2440: 'initializing' : cannot convert from 'int (*)[5]' to 'int *'
farfly_yu 2005-04-10
  • 打赏
  • 举报
回复
大虾们只说结果,没说原因啊?为什么啊
ljq14 2005-04-10
  • 打赏
  • 举报
回复
输出5
输出9

结果是什么啊?菜鸟的问题!还有,为什么要加个(int*)强制转换呢,a本来就是int啊

----------------------------------------------------------------------------
----------------------------------------------------------------------------

a是int的指针,p是int *类型的,所以要把(&a+1)转换成int *类型~~~~~~~~~~
llf_hust 2005-04-10
  • 打赏
  • 举报
回复
结果是什么啊?菜鸟的问题!还有,为什么要加个(int*)强制转换呢,a本来就是int啊

因为p是 int * 类型的指针呀。所以a要强制转换
pcboyxhy 2005-04-10
  • 打赏
  • 举报
回复
void func(b[][])
??
llf_hust 2005-04-10
  • 打赏
  • 举报
回复
#include<stdio.h>
main()
{
int a[]={1,2,3,4,5};

int *p = (int*)(&a+1);
clrscr();
printf("%d",*(p-1)); //输出5
}

#include<stdio.h>
void func(int b[][3])
{
++b;
b[1][1]=9;
}
main()
{
int a[][3]={1,2,3,4,5,6,7,8,9};
clrscr();
func(a);
printf("%d",a[2][1]); //输出9

}

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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