打卡23:void * 指针---强制指针转化
2014-09-05 16:32
211 查看
指针就是指向地址的。
指针与自己的地址无关,代表的就是指针的地址。
取指向地址的值
用于地址管理。不是值管理的方式。
m_cbf注释
client=10
&client=0x1234
(void *)是指向&client 地址的指针。
然后向m_cbf传这个指针的地址
将指针p接收参数,指向那个地址。同时将那个地址转成int型。即里面的值是int型
fd取里面存的int型的具体值
m_cbf1注释:
指针就是指向地址的。指向的东西理解为地址
用一个指针指向地址10
传指向地址10的指针,本质就是传指针指向的地址。
所以print args,结果为10.就是p指向的地址就是地址10
然后将地址10按整数存取。
注意不能*p,等于去地址10里面的内容了
m_cbf1(void *args) {
int fd1;
int *p;
fd1=(int)args;
printf("fd1=%d;args=%d\n",fd1,args);
}
m_cbf(void *args) {
int *p;
int fd;
p=(int *)args;
fd=*p;
printf("fd=%d\n",fd);
}
main () {
int client;
client=10;
m_cbf((void*)&client);
m_cbf1((void*)client);
}
result:
fd=10
fd1=10;args=10
==========================
例子2:
struct tms tms_buff;
//time_t is long
time_t t;
struct tm *ts;
long *p;
const time_t *q;
time(&t);
p=&t;
q=(const time_t *)&t;
printf("p=%u;q=%u\n",p,q);
printf("t=%ld;*p=%ld;*q=%ld\n",t,*p,*q);
ts=localtime(&t);
printf("%.2d\n",(ts->tn_year-100));
result:
p=4290769252;q=4290769252
t=1411359743;*p=1411359743;*q=1411359743
p和q是相同的
t,*p,*q值是相同的
q转成指针,即用增加一个指针,这个指针指向这个地址而已。
而不是获取某个值得地址。
q=(const time_t *)t;
表示指向t 值的地址
=============
pFun = (Fun)*((int*)*(int*)(&b))
&b地址
(int*)(&b)指向的地址内容是整数
*(int*)(&b)取值
((int*)*(int*)(&b)) 将取得值,当成地址,在这个地址中的值是整数
*((int*)*(int*)(&b))取这个整数
数组名不是指针
只是可以当作指针常量来看待
如果作为参数传入函数则会退化成指针
指针与自己的地址无关,代表的就是指针的地址。
取指向地址的值
用于地址管理。不是值管理的方式。
m_cbf注释
client=10
&client=0x1234
(void *)是指向&client 地址的指针。
然后向m_cbf传这个指针的地址
将指针p接收参数,指向那个地址。同时将那个地址转成int型。即里面的值是int型
fd取里面存的int型的具体值
m_cbf1注释:
指针就是指向地址的。指向的东西理解为地址
用一个指针指向地址10
传指向地址10的指针,本质就是传指针指向的地址。
所以print args,结果为10.就是p指向的地址就是地址10
然后将地址10按整数存取。
注意不能*p,等于去地址10里面的内容了
m_cbf1(void *args) {
int fd1;
int *p;
fd1=(int)args;
printf("fd1=%d;args=%d\n",fd1,args);
}
m_cbf(void *args) {
int *p;
int fd;
p=(int *)args;
fd=*p;
printf("fd=%d\n",fd);
}
main () {
int client;
client=10;
m_cbf((void*)&client);
m_cbf1((void*)client);
}
result:
fd=10
fd1=10;args=10
==========================
例子2:
struct tms tms_buff;
//time_t is long
time_t t;
struct tm *ts;
long *p;
const time_t *q;
time(&t);
p=&t;
q=(const time_t *)&t;
printf("p=%u;q=%u\n",p,q);
printf("t=%ld;*p=%ld;*q=%ld\n",t,*p,*q);
ts=localtime(&t);
printf("%.2d\n",(ts->tn_year-100));
result:
p=4290769252;q=4290769252
t=1411359743;*p=1411359743;*q=1411359743
p和q是相同的
t,*p,*q值是相同的
q转成指针,即用增加一个指针,这个指针指向这个地址而已。
而不是获取某个值得地址。
q=(const time_t *)t;
表示指向t 值的地址
=============
pFun = (Fun)*((int*)*(int*)(&b))
&b地址
(int*)(&b)指向的地址内容是整数
*(int*)(&b)取值
((int*)*(int*)(&b)) 将取得值,当成地址,在这个地址中的值是整数
*((int*)*(int*)(&b))取这个整数
数组名不是指针
只是可以当作指针常量来看待
如果作为参数传入函数则会退化成指针
相关文章推荐
- 把“0”强制转化为结构体指针类型得到成员变量的偏移量
- 指针类型的强制转化及实例分析
- 指针加减与地址强制转化
- 何时一个类的指针可以强制转化为另外一个类的指针,即使它们之间没有派生关系?
- 关于指针的强制转化之一(基类有虚…
- 关于指针的强制转化之一(基类没有…
- 类指针强制转化有可能引起内存泄漏
- C/C++ ------ 函数参数 为指针或引用时 强制转化 非常危险
- Marshal在C#中的应用(void *指针到IntPtr的转化)
- 类指针强制转化成子类, 子类的方法竟然可用.[VC++视频教程]
- Marshal在C#中的应用(void *指针到IntPtr的转化)
- 怎样将 类成员函数指针 强制 转换成 void*指针
- 指针强制转化(很有用的小技巧)
- 何时一个类的指针可以强制转化为另外一个类的指针,即使它们之间没有派生关系?
- 为何要将整型变量强制转化为指针
- void及void指针含义的深刻解析
- 指针强制转换and字节序导致的问题
- 怎样将成员函数指针强制转换成void*指针?
- pig强制转换(字符到整数):首位0怎么处理,‘01’到1的转化,
- void指针的使用