|
发表于 2009-3-26 08:41:26
|
显示全部楼层
Post by poet;1965306
> void parse(char *data_in, char *data_out)
> *data_out = data_in; //这样传递可以吗???
data_in 是个 char *
*data_out 是个 char ,两者类型不同。通常来说指针会比 char 大,所以这样传递会带来问题。
> aa= *(int *)packages; //这里指针packages是如何将值传给非指针aa?
建议换本新书看看,把指针装进 int 会带来不必要的灾难。尤其对于64位系统(指针64位,int为32位)。
C语言标准并没有定义int型能够装进一个指针,只定义了long型能够装进指针。所以应当完全避免把指针装进int的错误编程习惯。
*data_out = date_in // 确实是将 指针地址赋值给一个 char 类型, char 类型,取指针的前8位。。。
aa=*(int *)packages // 不是将指针赋值给int型。
packages 是一个指向char的指针, 但是 *packages确是一个字符, 而 aa = *packages 确是将一个 char 赋值给 int 型; 那么 (int *)packages 不同在于, 将 一个 字符型指针强制转化为 int 型指针;
举个例子:
int aa, *bb, cc;
char *packages="woshizhong";
bb = (int *)packages; // 这样 *bb 不就是等于 *(int *)packages么?
aa=*packages; // 此时 aa 从 *packages取得一个字符 w, 8位。 其余位不确定。
cc=*bb; // 而cc取得字符'wosh'(假定 int 为32位, 可以用sizeof(int)确定)。
现在可以验证, printf( "%c , %c, %c, %c\n", aa, cc, *((char *)&cc + 1), *(bb + 1) ); \\ aa 打印前8位 为 w, 而 cc 一样, 而后一个打印 'o', 而现在 bb 为32 位指针, bb+1自然指向 'i'; |
|