新手请教一个数据存储的问题
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int X=2314; //0x090A
int *p=&X;
int *y=(int *)(((int)p)+1);
printf("*p=%X\np=%X\n",*p,p);
printf("*y=%X y=%X\n",*y,y);
return 0;
}
这个是代码,想法比较简单,就是看数据x的地址,并查看地址x+1的数据
但是用GCC出来的结果是*p=90A p=BF85208C *y=E0000009 y=BF85208D
看书上面说int类型的变量X的4个字节应该存在以地址&x开始的4个地址中,那什么会出现上面的情况,第一个地址就把数据输出了
而且接下来的一个地址的最低2位输出的09?
还有这个程序在VC中编译无法通过,提示这条语句int *y=(int *)(((int)p)+1);语法错误,不解
望指点迷津
[解决办法]
int * ++ 和不等于 int(int *) + 1吧
char *好像才可以吧
[解决办法]
(((int)p)+1);
这个的含义是:把指针p转化为int值,然后再+1
int *p=BF85208C
转化为int值,然后再+1,结果当然是BF85208C+1=BF85208D
p+1,其实结果是(((int)p)+sizeof(int *));和(((int)p)+1);不同的,除非p是BYTE*或char*,因为sizeof(char*)=1
*p=90A p=BF85208C *y=E0000009
说明内存中数据是:0A 09 00 00 E0
↑ ↑
p (((int)p)+1)
那么,前4Byte,按int输出,是00 00 09 0a,就是90a
(((int)p)+1);后,按int输出,是E0 00 00 09