zhumengyun 发表于 2014-11-19 20:06:10

指针数组

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

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

笑笑生 发表于 2014-11-19 22:04:40

没错呀,你前面 str - str 结果应该为3 然后指针+3正好指向g了

风之残月 发表于 2014-11-19 22:41:44

str=(*p++)+2;                                // str = "myname", p = "fortemedia"
str=*(p+1);                                        // str = "nanjing"
str=p+3;                                        // p = "nanjing", str = p + 2 = "jing"(反汇编后发现居然执行了p = p + 3 = "jing",这是编译器的问题)
str=p+(str-str);        // (str - str) = 3, str = p + 3 = "g"

这是编译器的问题,不用理会
页: [1]
查看完整版本: 指针数组