char ch[16] = { 0 }; // To do other work. function((unsigned char*)ch);
char *p = new char[100]; unsigned char *pU = static_cast<unsigned char *>(p);
你对数据在内存中的表示理解不足. 对于计算机, 只保存二进制数据, 没有其它数据类型. 一般我们都以16进制看内存数据. 比如有内存数据 BYTE buf[5]={0x40, 0x41, 0x42,0x43,0}; 如果在调试模式下, 你把buf的地址值, 放到内存窗口查看, 就会看到内存16进制表示为 40 41 42 43 00 这时, 如果你强制把buf转换成int类型指针. 如 int *pInt = (int*)buf; 这时, 你发现pInt也指向buf的同一个地址, 但内存中的值还是40 41 42 43 00, 不会作任何改变. 只有当你想输出 printf("%d",*pInt); 因为在32位程序中是4个字节, 所以输出时会取出前4个字节 40 41 42 43, 由于window是大小端表示, 这个int数据就是 0x43424140 , 10进制表示就是1128415552 同理, 如果你有如下转换 char *pStr = (char*)buf; 那么会计算机就会读取把 40 41 42 43作为ASCII码, 查出要显示的字符. 40是@ 41是A 42是B 43是C 所以 pStr就是 "@ABC" 综上, 不管你把指针强制转换什么类型数据, 其内存表示都不会变, 只是当计算机要把数据翻译给人看的时候, 才会根据数据类型取对应字节数的数据, 再转换输出到屏幕上.
1.二进制表示不变,指针指向的内容不会发生任何变化,但由于指针类型的不同,直接解引用得到的值会发生变化 2.编译错误
65,187
社区成员
250,526
社区内容
加载中
试试用AI创作助手写篇文章吧