指针数组
#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的地址,好奇怪啊
没错呀,你前面 str - str 结果应该为3 然后指针+3正好指向g了 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]