c指针问题 求大神解答

代码如下:char*str[]={"Welcome","to","Fprtemedia","Nanjing"};char**p=str+1;str[0]=(*p++)+2... 代码如下:
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]);


一般老师这样折腾学生,工作中,我还没有写过这样代码

一旦真这样写,是否会内存泄漏,请大神们指点,我没有遇到过这样代码,没有测试过。


我智商下降了吗?觉得说的好乱,请高手重新点评。但意思就是这样。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式