c语言指针强制转换

2024-11-29 13:30:29
推荐回答(5个)
回答(1):

1、int *p=(int *)0x
这是将指针变量p指向一个绝对地址;而地址只是一个数值,需要转成指针类型才能与p匹配。
2、强制类型转换的一般形式为:(类型说明符)(表达式),例如: (float) a 把a转换为浮点型,(int)(x+y) 把x+y的结果转换为 整型。强制类型转换是通过类型转换运算来实现的。功能是把表达式的运算结果强制转换成类型说明符所表示的类型。注意事项:①类型说明符和 表达式都必须加括号(单个 变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。②无论是 强制转换或是自动转换,都只是为了本次运算的需要而对 变量的数据长度进行的临时性转换,而不改变数据说明时对该 变量定义的类型。

回答(2):

你这指针学的。。。。首先p没有初始赋值不能使用,所以需要写p=pt,让p获得a的地址,此时p指向a这个变量。。。。
强制类型转换只是个运算符,他不会改变变量类型,一个变量的类型也不能改变,a=(int)b,只是将b要付给a的值转换int再给a,但b得类型是不变的,说以必须是printf("%f",*(float*)p);而且每次用都要这么写,任何变量的类型声明时就决定了,不能改变,强制类型转换只是临时变一下,比如int强转char,只是这次读int我只读一个低字节,仅此而已。。。。
不过由于float和int都是4字节,对于指针,即使你不转换也没问题,指针类型转换只转换要读的字节数,不对数据进行处理。。。。

回答(3):

main()
{
float a=9.9;
float *pt=&a;
int *p;

p = (int*)malloc(sizeof(int));// 给p分配个内存吧

*(float*)p=*pt;
printf("%f\n",*p);
}

不过你这样没什么意义啊!取值范围小的向取值范围大的强制转换,会丢失数据的!
/*********************************************************************************************************
**********************************************************************************************************/
想让它有正确的结果,需要这样写:
main()
{
float a=9.9;
float *pt=&a;
int *p;

p = (int*)malloc(sizeof(int));
*(float*)p=*pt;
printf("%f\n",*(float*)p);
}

回答(4):

首先呢,类型强制转换不会改变原本的类型,比如 *(float *)p转换后,p的类型还是int,此时输出还是将原来的类型输出。一个变量被定义了一个类型,就不会能改变,强制转换只有在该条语句上将原本p中的值取出然后转换,*p不会改变。如果你非要这样输出,建议你用其中间变量,或者
输出的时候强制转换,当然,此时的值可能会变掉

回答(5):

你这样不行的。p是指针,你没有初始化,即分配内存或者指向地址,就对它赋值。