读书人

读内存地址有关问题

发布时间: 2012-04-22 18:34:46 作者: rapoo

读内存地址问题
struct test_st{
...
unsigned int* data;
...
}*test;


写法1:
usigned int *value1 = (usigned int)(test->data+100);
usigned int value2 = *value1;

写法2:
usigned int *value1 = (usigned int)test->data+100;
usigned int value2 = *value1;

为什么写法1和写法2 value2会得到两个不同的结果

[解决办法]
第一个,是指针加减。
type *p;
(unsigned long)(p+n)==((unsigned long)(p)+n*sizeof(type))
第二个,是普通算术加减
[解决办法]
指针+-规则:
Type *p;
int n;
p+n的数值(unsigned long)(p+n)
等同于 ((unsigned long)(p) + n * sizeof(Type));
例如:
当Type是int的时候,p=0;设n=1.
那么 p+n的数值是 4.
等同于 0+ 1*sizeof(int)=4.
[解决办法]
我到底发帖成功没。。。
无语了。。。
[解决办法]
指针加法,加的实际数值是100*sizeof(int)。也就是说要乘上它所指类型的尺寸。

后面那个就只是普通的算术加法。
[解决办法]
楼上几位都解释的很清楚了啊

读书人网 >C++

热点推荐