本文目录
- c语言指针强制类型转换
- 成员函数指针强制转换
- 使用(LPTHREAD_START_ROUTINE)强制转换和函数指针
- 使用什么方法可以将类成员函数指针正确地转换为函数指针
- 将一个变量强制转换为函数指针变量, 编译出现错误:not an lvalue
- 函数形参为指针类型,在实参传递时有时候要进得指针的强制转换,可能会出现的问题怎么解决
- 指针作为函数参数,在传递实参时有强制转换时的问题!
c语言指针强制类型转换
一个指针做算数加减的时候,字面上的加一或者减一,实际增加或者减少的值是其指向类型的空间大小也就是说,p+1,实际增长的值是sizeof(*p)所以,将p转为int*后,加10,实际增加是10*sizeof(int)也就是40而如果是p+2,由于p是char*,实际增加的是2*sizeof(char)=2
成员函数指针强制转换
#include《iostream》using namespace std;class CA;typedef float (*PFN)(float a, float b);class CA{public: static float func(float a, float b) { return (float)(a+b); }};int main(){ CA a; PFN pFn; pFn = &CA::func; float c = pFn(1.1f, 2.2f); cout《《c; return 0;
}
使用(LPTHREAD_START_ROUTINE)强制转换和函数指针
这里和调用约定有关,默认的调用约定是__cdecl,叫做调用者平栈.此时函数的声明只是说期望从堆栈得到那些参数.如果你的声音和调用者所期望的不一致,只是会造成函数读到错误的参数值或是丢弃一部分参数,不会影响程序的运行(需要修改参数的除外),所以你的程序能正常运行.这里扩展说下,WINDOWS的系统API的调用约定是__stdcall,这叫用被调用者平栈,也是就说在函数返回时由函数平栈,所以你调用WINAPI时参数出现问题,程序一定运行不了.至于返回值,是放在EAX寄存器里的,不管你函数是否有返回值,调用都者是能从EAX里得到值的,只是不正确罢了.
使用什么方法可以将类成员函数指针正确地转换为函数指针
采用取成员函数指针的地址的方法,先把指向成员函数指针的指针强制转化为别的类型,如unsigned*,当然同样可以通过此转化后的指针经过相反的变换来调用成员函数。于是乎要转化为void*的问题也随之可解,如下示例: /* VS2003下编译运行 */
将一个变量强制转换为函数指针变量, 编译出现错误:not an lvalue
强制类型转换不是说可以任意把一个 类型的变量转化成另一个类型的变量的!!!只有满足一定条件的情况下才可以把一个 类型的变量转化成另一个类型。你这个不是特定情况下的一种。所以不能用这个
函数形参为指针类型,在实参传递时有时候要进得指针的强制转换,可能会出现的问题怎么解决
我好奇的是。。一个char*型的形参。。你干嘛要强制把一个int*的转成char*解决办法就是。。在函数里面再转化回来。。或者你还是把形参类型改了吧。
指针作为函数参数,在传递实参时有强制转换时的问题!
ochar*转换成int*后, ++运算是以int的长度来计算的, 也就是指针会移动4个字节.