鱼C论坛

 找回密码
 立即注册
查看: 1381|回复: 2

指针数组

[复制链接]
发表于 2014-11-19 20:06:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
        char *str[]={"welcome","tomyname","fortemedia","nanjing"};
        char **p=str+1;
        str[0]=(*p++)+2;
        str[1]=*(p+1);
        str[2]=p[1]+3;
        str[3]=p[0]+(str[2]-str[1]);
        printf("%s\n",str[0]);
   printf("%s\n",str[1]);
   printf("%s\n",str[2]);
   printf("%s\n",str[3]);
   printf("%d   %d  %d",(str[1]-str[0]),(str[2]-str[1]),(str[3]-str[2]));
        return 0;

}
运行结果是myname
nanjing
jing
g
-30 3 3
为什么  printf("%s\n",str[3]);时输出的是g
我调试过p[0]指向的是j的地址,好奇怪啊

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-19 22:04:40 | 显示全部楼层
没错呀,你前面 str[2] - str[1] 结果应该为3 然后指针+3正好指向g了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-19 22:41:44 | 显示全部楼层
str[0]=(*p++)+2;                                // str[0] = "myname", p[0] = "fortemedia"
str[1]=*(p+1);                                        // str[1] = "nanjing"
str[2]=p[1]+3;                                        // p[1] = "nanjing", str[2] = p[1] + 2 = "jing"(反汇编后发现居然执行了p[0] = p[1] + 3 = "jing",这是编译器的问题)
str[3]=p[0]+(str[2]-str[1]);        // (str[2] - str[1]) = 3, str[3] = p[0] + 3 = "g"

这是编译器的问题,不用理会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 10:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表