数据结构 线性表 for(++p;p<=q;++p) * (p-1)=*p 这句是怎么执行的?

发布网友 发布时间:2024-10-23 18:01

我来回答

2个回答

热心网友 时间:2024-11-01 16:52

第一个++p:循环体内部语句执行前,指针P自增一次,指向第二个元素。
p<=q: 如果P的地址大于Q的地址,循环就跳出。
* (p-1)=*p:执行循环体内部语句,当前指针P指向元素的前一个元素的值,被复制为Q的地址的值。
第二个++p:一次循环完毕,指针P再次自增。准备下一次循环。追问您的意思是 先执行 ++p 然后判断p<=q 再执行 * (p-1)=*p 最后执行 ++p 对吗?
那为什么不能这样写?
for(++p;p<=q;++p)
{
*(p-1)=*p;
}

追答可以这么写啊。。。。
但是这么写,不是有2个括号么。太占行了。。。
循环语句for或着while,判断语句if,如果内部语句之后一句话,可以不用括号的。
像这样的语句很多。
int i = j = n = 0;
例子1
for(i=0;i<10;i++)
for(j=i;i<10;j++)
printf("%d ",a[i][j]);
例子2
while(i<100)i++;
例子3
while(i++<100)
if(i%10==0)printf("%d ",++n);

热心网友 时间:2024-11-01 16:53

++p和p++在这里是一样的。
*(p-1)=*p;意思是把后面的数据复制到前面。
比如原来elem[]={1,2,3,4}//假设最多容纳四个数据
当i=2时,第一次执行*(p-1)=*p;时发生的事情就是elem[2]=elem[3];
结果就是elem[]={1,2,4,4},但同时由于l.length减了1,所以长度变成3,有效数据为1,2,4,完成了删除第i(2)个数据的操作

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com