实践一下:
int a[5]={0,1,2,3,4};
int b;
b=*((int)a+sizeof(int)*2);
问b是否能取到a[2]的值?
如果你说不能,恭喜你,你很理解地址与数值的概念,如果你说能,也不能怪你,下面我们就分析一下地址和数值的关系,由上面的讲述我们知道((int)a+sizeof(int)*2)这里得到的确确实实是a[2]的地址,然后对地址取内容理所当然取的是a[2]的值啊,呵呵,初学者可能都会这么想,但是那都是我们一厢情愿所造成的,其实((int)a+sizeof(int)*2)只是一个整数,不是地址的含义,没有任何指向意义,也就是a[2]的地址值等于((int)a+sizeof(int)*2),但是并不意味着((int)a+sizeof(int)*2)是地址,实际上地址本来就是一个基本数据类型,也就是说地址是有指向意义有类型这是地址和地址值的区别,如果没有类型,操作系统从这首地址取值根本不知道要取多少字节,
所以我们要加上强制类型转换,使他有类型有指向意义即若改成*(int*)((int)a+sizeof(int)*2)即可取到a[2]的值