c指针问题 求大神解答
char *str[]={"Welcome","to","Fprtemedia","Nanjing"};
char ** p=str+1;
str[0]=(*p++)+2;
str[1]=*(p+1);
str[2]=p[1]+3; //为何执行完这一步p[0]指向 j ?
str[3]=p[0]+(str[2]-str[1]);
问题在代码注释方,请详细解答。 展开
推荐于2016-02-08
没错,是指向j
公式搞不清语法,绘制语义树理解,指针存贮搞不清画方块图,我就不画了,我来说:
//4个无名指针指向了4个字符串,[dummy0,dummy1,dummy2,dummy3]
//str指向了这4个数据的一维数组
char *str[]={"Welcome","to","Fprtemedia","Nanjing"};
// p --> dummy1 --> "to"
char ** p=str+1;
//编译程序是压栈的,*p++ 意思是 *(p++), p++之后, p-->dummy2, 也就是str[2]
str[0]=(*p++)+2;
str[1]=*(p+1);
//p[1], 就是p+1位置, p[1]-->dummy3-->"Nanjing"
//p[1]+3指向 “jing", 这个位置被保存到str[2],也就是dummy2
//*str[] = {"", "Nanjing", "jing", "Nanjing"} now
// p-->dummy2, 显然是 j
str[2]=p[1]+3; //为何执行完这一步p[0]指向 j ?
str[3]=p[0]+(str[2]-str[1]);
一般老师这样折腾学生,工作中,我还没有写过这样代码
一旦真这样写,是否会内存泄漏,请大神们指点,我没有遇到过这样代码,没有测试过。
我智商下降了吗?觉得说的好乱,请高手重新点评。但意思就是这样。