读书人

C中地址有关问题

发布时间: 2012-09-10 11:02:32 作者: rapoo

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数组的地址
数值"总是相等",但指针类型不同

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

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

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

读书人网 >VC/MFC

热点推荐