c语言 main() { char *p="abcdefgh",*r;  long *

c语言
main()
{ char *p="abcdefgh",*r;
 long *q;
q=(long*)p;
q++;
r=(char*)q;
 printf("%s\n",r);}
程序输出结果 求解释

q=(long *)p;
q 是 long int 指针, p 是 char 指针.
这个转换 是 q 也指向 p 的首地址。

不同的是, q 指针 指数加 1,指向的地点 加4 bytes
而 p 指针 指数加 1,指向的地点 只加1 bytes
因为,sizeof(char) 等于 1,sizeof(long) 等于4.

q++; // 指向的地点 加了 4 bytes,也就是 越过了 abcd
r=(char *)q; // 把现在q 指向的地点 给 char r 指针,作为 r 指针的首地址。
printf("%s",r); // 按字符形式 打出: efgh
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答