衡水中学2016在校人数:一段C语言的子程序中的问题,

来源:百度文库 编辑:中科新闻网 时间:2024/05/05 09:39:39
void half(void *x ,char type)
{switch(type)
{case 'i': *((int*)x )/=2;
.........}
}
我不知道这里的*((int*)x)是什么意思.为什么不用
(int *x)/=2

(int *x)/=2这样写是错的

int *是声明指针变量的语句,不是一个运算,所以不能防在表达式里边。会出编译错

而(int*)是强制类型转换运算符,表示把x转换为整形指针,*后面跟指针,表示使用这个指针指向的变量

将void类型的指针强制转换成int类型,然后再是使用指针指向的这个数:

(int *x)/=2;//就相当于:int *x; x/=2;

*((int) *x)/=2;//相当于 int *x; *x=*x/2;

给LZ分析一下*((int*)x )/=2;
假如我用 int * k= (int*)x; 这句应该是正常的,使用(int*)来把x强制转换成int 指针类型,并且赋值给k指针.
那么我们就有 *k/=2 展开就是 *k=*k/2; 这个也很好理解,因为这句是把指针k 的指向的值除以2再赋值给k指向的地址.
那么不用k做中介呢,呵呵,就是LZ给的表达式了啊~~
--------------------------------------------
至于(int *x)/=2 展开就是(int *x)=(int *x)/2 这个(int *x)是申明指针的语句,怎么能做运算呢?
--------------------------------------------
enjoy it~~

*((int*)x )/=2;
(int *) x是将x强制转换,提取出x的地址,
*((int*)x )是指上述取得地址值对应的单元中的数值。