C语言本上怎么没这种用法(void *)
unsignedcharerr;unsignedcharf;unsignedchara(unsignedchari,void*j)//void*j怎么理解{if(j==(...
unsigned char err;
unsigned char f;
unsigned char a(unsigned char i,void *j) //void *j怎么理解
{
if(j==(void *)0) return 0; //j==(void *)0怎么理解
*(unsigned char *)j=1; //*(unsigned char *)j=1怎么理解
return 1;
}
void main()
{
f=a(1,&err);
}
求大神指点 展开
unsigned char f;
unsigned char a(unsigned char i,void *j) //void *j怎么理解
{
if(j==(void *)0) return 0; //j==(void *)0怎么理解
*(unsigned char *)j=1; //*(unsigned char *)j=1怎么理解
return 1;
}
void main()
{
f=a(1,&err);
}
求大神指点 展开
3个回答
展开全部
void *j; 参数2是指针,指针类型是 void ,指针指向某存储块的首地址,首地址开始后的数据是许多字节。
(void *)0 强制转化0 为 void类型指针 地址值,同 NULL.
j==(void *)0 理解为 j==NULL
(unsigned char *)j 把 void 型指针 转换为 unsigned char 型指针
*(unsigned char *)j 是 j 指向的值 (类似平时 语句里的*p) ,无符号char型(即1字节无符号整型)
*(unsigned char *)j = 1; j 指向的 无符号char型(即1字节无符号整型)数值 赋为 1。(类似平时 语句里的*p = 1;)
(void *)0 强制转化0 为 void类型指针 地址值,同 NULL.
j==(void *)0 理解为 j==NULL
(unsigned char *)j 把 void 型指针 转换为 unsigned char 型指针
*(unsigned char *)j 是 j 指向的值 (类似平时 语句里的*p) ,无符号char型(即1字节无符号整型)
*(unsigned char *)j = 1; j 指向的 无符号char型(即1字节无符号整型)数值 赋为 1。(类似平时 语句里的*p = 1;)
追问
你的答案也蛮好的,可惜不能采纳两条为最佳答案,谢谢
展开全部
void *j
j为指针 void* 使用时可以转为任意类型的指针
//*(unsigned char *)j=1怎么理解
将指针 转换为char类型的指针
j为指针 void* 使用时可以转为任意类型的指针
//*(unsigned char *)j=1怎么理解
将指针 转换为char类型的指针
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void *就是无类型指针类型,意思是这个j仅仅是一个指针,它所指向的内存空间没有被认为是某一种特定的类型。
j被定义成void *,(void *)0把0强制类型转换为void *,便于跟j进行同类型比较,所以j==(void *)0的意思是,判断j的值是不是0,即j是否指向0地址。
*(unsigned char *)j,首先看(unsigned char *)j,意思是把j强制类型转换为unsigned char *型,那么*(unsigned char *)j就是把j 指向的内存空间的一个字节强制当作unsigned char来用。*(unsigned char *)j=1就是把1写入j指向的那个一字节空间。
j被定义成void *,(void *)0把0强制类型转换为void *,便于跟j进行同类型比较,所以j==(void *)0的意思是,判断j的值是不是0,即j是否指向0地址。
*(unsigned char *)j,首先看(unsigned char *)j,意思是把j强制类型转换为unsigned char *型,那么*(unsigned char *)j就是把j 指向的内存空间的一个字节强制当作unsigned char来用。*(unsigned char *)j=1就是把1写入j指向的那个一字节空间。
更多追问追答
追问
unsigned char a(unsigned char i, *j)
{
if(j==0) return 0;
*j=1;
return 1;
}
哪改成这样有什么不同?
unsigned char a(unsigned char i, *j)
{
if(j==0) return 0;
*j=1;
return 1;
}
哪改成这样有什么不同?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询