[mw_shl_code=c,true]#include <stdio.h>
int main(void)
{
char *pc;
int * pi;[/mw_shl_code]
[mw_shl_code=c,true] int i=256;[/mw_shl_code]
[mw_shl_code=c,true] char c=255;[/mw_shl_code]
[mw_shl_code=c,true] pc=&c;[/mw_shl_code]
[mw_shl_code=c,true] pi=&i;
pc=(char *)pi; //疑问处
}[/mw_shl_code]
既然所有指针类型都是占四个字节,那么将int类型指针赋给char类型指针是不会导致数据丢失的吧。既然这样按我的理解,
将右值指针赋给左值指针(两种指针类型不同)只是程序员希望将右值指针所指向的数据类型通过指针按照左值指针指向的数据类型来访问。
既然要通过左值指针来访问右值指针所指向的数据类型,那么,问题来了,指针在定义的时候,就已经知道自己在加加或者减减操作时应该访问多少字节的内存,
或者加减n时应该跳过多少字节的内存。既然要用左值指针来进行后续的数据访问,那么为什么不直接把右值指针的地址给左值指针,(正如我第一句所说的,都是四字节不会丢失数据)
而要进行强制类型转换呢?
而且疑问处的代码去掉(char *),在VC++6.0 还有多版的c在线编译器上均不会报错…是因为像我理解的一样所以才不会报错,还是其他。还是必须要进行强制类型转换?希望大家指点一下迷津! |