关于C语言的一个问题 求高手解

2024-12-28 19:49:32
推荐回答(2个)
回答1:

不是貌似类型不配,就是类型不配,编译不过。即使p指向a了(比如这样:p=(unsigned short
)a),*p是a[0]不错,但*(p+1)却不是a[1],而是a[2]……这操作起来就不方便了。操作unsigned char A[12]的指针得用unsigned char *p声明才匹配。

回答2:

(UC *)表示强制转换,即unsigned char *;这个其实就是一个赋值语句,
取A[0]的地址,强转成 unsigned char *类型,在往这个地址里写数据,
你写的:
unsigned short A;
((unsigned char*)&A)[0]=0;
((unsigned char*)&A)[1]=1;
是可以的 ((unsigned char*)&A) 表示的就是地址,[i],这个你可以理解成 *( addr +i)
所以上面的展开就是:
*( ((unsigned char *)&A) + 0 ) = 0; 0000 0000
*( ((unsigned char *)&A) + 1 ) = 1; 0000 0001
short类型是两个字节的,你强转成unsigned char *类型,地址加1则,则地址增加1个字节,所以
你打印的结果应该是这两个合起来的就是 0000 0001 0000 0000,结果应该这个256吧,学C语言不要太纠结于类型什么的,你要知道你真正操纵的是地址。