请高人指点一道C语言指针题,线上等

以下程序的输出结果是?
#include <string.h>
main()
{char b1[8]="abcdefg",b2[8],*pb=b1+3;
while(--pb>=b1) strcpy(b2,pb);
printf("%d\n",strlen(b2));}

麻烦请详细的写出解题思路,万分感谢!

while(--pb>=b1) strcpy(b2,pb); //循环3次,这个我想你应该能看懂吧

程序的结果为7

最容易错的地方while(--pb>=b1) strcpy(b2,pb);
循环第一次 *pb='c' pb指向了数组b1[2]的位置
第2次 *pb='b' pb指向了数组b1[1]的位置
第3次 *pb='a' pb指向了数组b1[0]的位置
所以执行strcpy(b2,pb); 后,你可以把b2也理解成一个指针,(但不是,它是常量),从pb位置开始进行复制,因为b1[8]中只有7个值,
所以b2数组为abcdefg 7个
温馨提示:内容为网友见解,仅供参考
无其他回答

C语言指针问题(求高人指点啊)
第二个错在 p=*q;看来你还没理解指针变量,书上明确定义指针变量只能用来存放地址!而*q是一个具体的值(数或者字符什么的)!第三个隐性错误!*p=a;从你的定义看,指针p未被初始化!(p=*q是错误的)如果你把p=*q改成p=q那么*p=a;就没问题了。如果你删了p=*q,那就错咯!3 int a=...

c语言中指针加减问题,求解答。
float类型的指针,在地址上来说的确是按4字节为单位移动的,但是在数组里面还是一格一格一栋栋饿啊,这个一格的单位是4字节。p+3-p,你等式左边的算法是在数组里的单位,既一格一格移动;=12,你右边的是按照地址的实际大小得出的。两边表示的不是一种单位啊。。。还有就是这种理论上的东西你越想越...

C语言 利用指针实现求数组元素中的最大值和最小值
for(i=1;i<N;i++) 数组下标是 0开始的。 不是1 。 1就不对了。 你改改看看 for(i=1;i<N;i++){ if(*p<*(p+i))p=(p+i); \/\/这应该是用个临时变量 你这样改变这节的指向 就不对哦 else if(*t>*(t+i))t=(t+i);} ...

C语言编程遇到问题,请求高手指点,是统计区间个数的问题
for(i=1;i<c;i++){ for(j=0;j<最大的个数;j++){ if(a[i]>minin&&a[i]<(minin+division)){ 存储链表 } } minin+=division;在链表中存储一个标记符 } 存储 因为不知道 大小 应该用链表

我是一位C语言的初学者,有个问题,请哪位高人指点一下。 mian() {float...
其实C语言只是一门编程语言,要学它,但是不是所有学C语言的人都真正直接拿它写软件,因为他的低层库要求程序员学很多东西。大家都是把C或C++学好了,然后用其它的集成开发环境,比如VC++。如果你只想用C语言编写软件,可能你写一个窗口可能就要用上百条代码,而且还得学很多低层的东西,或者调用...

c语言出圈问题请高人来 解决
我的问题就出来了那倒数第i+1个数以后的就不往前移了吗?这是当时第一个人跳出的时候就将他放在最后一个位置,以就是倒数第一个位置,第二个人跳出,则放在倒数第2个位置,,,第i个跳出的人就放在倒数第i个位置 其他的我就不想看了

我是一位C语言的初学者,有个问题,请哪位高人指点一下。 mian() {float...
a1=123.456; printf("%d",a1); } 输出float型的数据必须要用%f,%d是输出整形的。(2)如果a和b互换应该要设置多一个变量,例如有2个杯子,a杯和b杯,a装水,b装可乐,如果直接互换是没可能的事,必须借助c杯,a倒进c杯,b倒进a杯,c倒进b被;程序:main(){ int a,b,c;printf("请...

求助:一个C语言的题!
printf("\\n%21.10f:a1",a);\\n 换行 21.10f 输出格式,单精度,最高可到21位,保留小数点后10位 :a1 原样输出 小数部分自己无法计算,是TC算法编译时电脑自己加的,由算法决定,其实并不精确。

c语言链表空间分配的问题,邀请诸位高手共析~
s=(pNode)malloc(sizeof(pNode))只申请了一个指针空间。故而后面free(s),因为找不到s指向的Node节点空间。而报错。申请一个pNode的空间,返回一个pNode型指针s,。s->next = s是指针s的强制性操作未知空间(指针是C的精华,也是缺点。)。也就是操作了s指向空间(开始的前四个为data,后四个为next.实际上,...

用C语言求sinx的值,望高人指点
你的factorial是一个函数,好象不可以直接乘以一个整数的吧,还有double factorial(int n)是不是需要一个返回值呢。if(n==0) return 1;只是在n=0的时候有返回值,n!=0就没有了

相似回答