c语言强制类型转换指针
1. c语言 指针类型强制转换
%x 默认输入类型为int
所以传过去的值实际上是0xaa(*p的值)但是当做int的时候会扩展
0xaa最高位为1所以会当做负数扩展为0xffffffaa
2. C语言空指针强制类型转换
(unsigned
int
*)0x00100把0x00100转化成指针
因为unsigned
int
*
是指针类型
好比(int)3.1415
就是取整数部分,这里不是转化为变量吧,而是一个常量3
3. c语言指针类型强制转换,#include问题
(1)*p的值是浮点数5.6的机内码直接当int值看,具体是什么要用专门的工具查.
(2)两句都是对的
(3)结果是hibc.s1[3]='0'后s1="abc",strcat(s2,s1+1)将S1串从第二个字符开始连接到S2,这时S2为ghibc,puts(s2+1)从S2串的第二个字符输出,所以结果为hibc
4. 关于c语言的指针强制转化
int *p=(int *)0x
这个是将指针变量p指向一个绝对地址
而地址只是一个数值,需要转成指针类型才能与p匹配
5. C语言中指针强制转换赋值
你这样理解是有问题的,你应该知道&的优先级是高于类型转换的,所以是先取指针,然后再强制转换为你需要的类型。例如第一句,Rcs9000_ram_port_flag必然是在前面定义为RCS9000_PORT_FLAG*类型,但后面的&g_Prot_flag[port_no]肯定在前面定义的并不是此类型,安全起见应该先将此指针转换为RCS9000_PORT_FLAG*类型然后再赋值。假如&g_Prot_flag[port_no]为char类型,那么指针加1的时候则移动一个字节(即指向下一个8位数据),假如RCS9000_PORT_FLAG*类型为int类型(假设是32位系统,即int为32位),则强制转换后按32位移动指针。
6. c语言指针强制类型转换
一个指针做算数加减的时候,字面上的加一或者减一,实际增加或者减少的值是其指向类型的空间大小
也就是说,p+1,实际增长的值是sizeof(*p)
所以,将p转为int*后,加10,实际增加是10*sizeof(int)也就是40
而如果是p+2,由于p是char*,实际增加的是2*sizeof(char)=2
7. c语言指针转换
没有实用意义,只能用于练脑子,或考考雕虫小技,或像鲁迅笔下的孔乙己,卖弄一下“茴香豆的回字有多少种写法”,以彰显学问有多深。
*p 的“星号”是 “求值运算”,如果p是指针,*p 则是 指针 p 指向的值。
如果 p 不是指针, 那么 这个 *p 就不知道是什么东东,可能是乘法,也可能是错的,那就闲着没事练脑了。
(int *) 是“强制转换”,有星号,则是“指针地址类型转换”,例如 char *p="1"; (int *) p 就 把 p 的首地址变成 int 型 指针指向的地址,原来 p+1 是 p 的地址加1 ,现在 成了 p+sizeof(int)。 *(int *) p 就是首地址指向处4个字节长度内存里的数值了。
*(int *)*p 不知道有何意义,要把程序写全,才好猜,很费脑子的。简单思维,可以说是一个错误表达式。
8. C语言中给一个地址强制类型转换是为什么(指针)
这是因为在给指针进行操作时比如p++,不同类型的指针的步长是不一样的,比如Int 和char 类型的指针肯定是不同的,这对编译器很重要。而void比较特殊,可以看作是通用指针,可以指向任何类型,它不能进行算术运算,因为编译器无法确定它的步长,当然可以先进行强制类型转换
9. c语言中指针类型强制转换到底怎么写
假设你上面的例子中a是char*类型,则:
unsigned int*p = (unsigned int*)a;
这就是将a强制转换成unsigned int*类型。