求助一个字符指针的问题
#include<stdio.h>int main()
{
char *q, *p = "Language";
for(q = p; q != "\0"; q++);//为什么不用p++??
for(q--; q >= p; q--)//(q = 7,q=6)()
{
putchar(*q);
}
return 0;
}
大佬帮我看看这个程序,为什么第一个for那里不用写p++。
我所理解的这里的指针指向的是单个字符,正确吗?
那既然如此,那p++不也是需要的吗? 本帖最后由 巴巴鲁 于 2021-2-27 09:27 编辑
这里的指针指向的确实是单个字符,你理解的正确
#include<stdio.h>
int main()
{
/*
char *q, *p = "Language"; // 这里让p指向了"Langueage"的首地址 ,即*p = L
for(q = p; q != "\0"; q++); // p的地址赋值给了q, q++不是相当于p++吗?
for(q--; q >= p; q--) // 这里q >= p 是一直到q指到"e"这里的地址才会开始这个循环
{
putchar(*q);
}
*/
// 其实我觉得写成这样很好理解,上面的程序我刚开始都懵了,不知道要干什么
char *q, *p = "Language";
q = p; // q指向p的地址
for(; p != "\0"; ++p) // 让p指向"Language"的末地址
{
;
}
for(--p; p != q; ) // 从“Language”的末地址开始,一直到首地址结束,实现逆序打印
{
putchar(*(--p)); // 地址前移
}
return 0;
} 巴巴鲁 发表于 2021-2-27 09:25
这里的指针指向的确实是单个字符,你理解的正确
#include<stdio.h>
int main()
{
/*
char *q, *p = "Language"; // 这里让p指向了"Langueage"的首地址 ,即*p = L
for(q = p; q != "\0"; q++); // p的地址赋值给了q, q++不是相当于p++吗?
for(q--; q >= p; q--) // 这里q >= p 是一直到q指到"e"这里的地址才会开始这个循环
{
putchar(*q);
}
*/
老哥,按照您的理解,第一个for语句执行的时候 q++那么p同时也进行p++这样吗?对于这里还是不太能理解。
那么第二个for 的时候,循环条件是q >= p,既然如此,那由上一个for,p = q 应该此时的值是这样啊。
但是这里的p的初地址应该是p吧。
学编程的盆子 发表于 2021-2-27 10:55
老哥,按照您的理解,第一个for语句执行的时候 q++那么p同时也进行p++这样吗?对于这里还是不太能理 ...
不是,是q=p时,让q这个临时指针来控制到达Language的末地址
而这个程序想实现逆序打印,肯定要知道这个字符串的首末地址
这样程序的首地址不会改变,又找到末地址,实现逆序打印
你看看我的那个程序,那样子来写可能更好理解
因为你这个程序不便于理解,而且执行时效率不高(外层循环最后一次才会开始执行内层循环)
页:
[1]