您的位置:首页 > 其它

打卡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))取这个整数

数组名不是指针

只是可以当作指针常量来看待

如果作为参数传入函数则会退化成指针
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: