读内存地址有关问题

读内存地址问题
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)。也就是说要乘上它所指类型的尺寸。

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