一个强制转换问题

zll_lover 2010-09-18 11:05:12
#include <stdio.h>
#include <stdlib.h>

typedef struct{
int a;
int b;
char c;
char f;
}mystruct;

int main() {
unsigned char *buffer[100];
mystruct *test = (mystruct *)buffer;
int i;

for(i=0;i<5;i++){
test[i].a=0;
test[i].b=1;
test[i].c='2';
test[i].f=‘2’;
}

return 0;
}
我不理解的是为什么红色部分可以强制转换,buffer是一个放有100个字符指针的数组,
转换为一个结构指针,但结构指针里面的成员和字符串指针并不能匹配啊?
...全文
113 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckt 2010-09-18
  • 打赏
  • 举报
回复
是你要进行强制转换的,编译器顶多能给你个警告吧
正如你要对一个空指针操作一样,很多东西需要自己控制。
jhlong 2010-09-18
  • 打赏
  • 举报
回复
在网络编程的时候会用到这样的转换,比如说传一个结构体
小魔菇 2010-09-18
  • 打赏
  • 举报
回复

只是把一段内存转化成一定的格式操作而已
可以转换 但是没有任何意思
pengzhixi 2010-09-18
  • 打赏
  • 举报
回复
你这样转换只是说将buffer这段内存作为mystruct结构体来解释而已。
pengzhixi 2010-09-18
  • 打赏
  • 举报
回复
所以应该避免这样转换。
西湖秀才 2010-09-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zll_lover 的回复:]
感谢大家,那我请问上面的毫无关系可以强制转换,那
char a[][2]={{'a','b'},{'c','d'}};
char *p[2];
p=(char *[])a;
这个为什么根本就无法执行呢?我不在乎数据正确与否,可它不能强制转换的原因是什么?
[/Quote]
p=(char *)a;
zll_lover 2010-09-18
  • 打赏
  • 举报
回复
可上面我写的根本编译不过,提示cast array is 无效的
dingshaofengbinbin 2010-09-18
  • 打赏
  • 举报
回复
指针的强制转换都是可以的,因为他们都只是指针,但是当你运行的时候就有可能出错了,所以要避免这种转换。。。。
zll_lover 2010-09-18
  • 打赏
  • 举报
回复
感谢大家,那我请问上面的毫无关系可以强制转换,那
char a[][2]={{'a','b'},{'c','d'}};
char *p[2];
p=(char *[])a;
这个为什么根本就无法执行呢?我不在乎数据正确与否,可它不能强制转换的原因是什么?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧