首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

C中地址有关问题

2012-09-10 
C中地址问题int main(){int num[6]{1,2,3,4,5,6}int* ptr(int*)(&num+1)printf(%d,*(ptr-1))}输出

C中地址问题
int main()
{  
int num[6]={1,2,3,4,5,6};
int* ptr=(int*)(&num+1);
printf("%d",*(ptr-1));
}
输出为什么会是6呢,百思不得其解,求大侠帮助啊。谢谢了。。

[解决办法]
你要一步一步看,&num 是取num数组的地址然后再加一 也就是加到了整个数组后面的一个(6的后面一个地址),然后强转为int*类型,你输出呢又把地址又减了1(减到了6的地址),然后转为int所以就是6了啊。
[解决办法]
num 类型是int *
&num 类型是int (*)[6]

&num + 1 == num + 6
[解决办法]
num是num[0]的地址
&num是num数组的地址
数值"总是相等",但指针类型不同

指针就是地址——我们可以把指针认为是用来存放地址的数据类型。不能把指针简简单单的当成一个整型数,虽然地址的值是一个整型数据。

指针是有类型的,但是这个类型不是给指针分配内存的,而是用来寻址的。

指针类型决定指针跨内存单元的步长。

热点排行