指针 求解惑
本帖最后由 谁能不死 于 2019-11-11 08:39 编辑# include <stdio.h>
int main(void)
{
char a[] = "fishc.com is a good web site !",b, *p, *q;
p =a, q = b;
for (;*p !='\0';++p,++q)
{
*q = *p;
}
*q = '\0';
printf(" %s\n", a);
printf(" %s\n", b);
return 0;
*q ='\0';为什么需要这行;这行有什么作用,老师视频中没有说,我也想不明白;哪位大神可以给说是怎么回事吗? 发个求助帖也要审核几天吗? 大家一般习惯于用char a[]="**gshbsvsh"这样的方式来初始化一个字符串,但如果是char a[]={'a','b','c','d','\0'}的方式来初始化,须以'\0'结尾。这个其实你应该有个大概印象才对,只是没特别注意。 倒戈卸甲 发表于 2019-11-11 16:52
大家一般习惯于用char a[]="**gshbsvsh"这样的方式来初始化一个字符串,但如果是char a[]={'a','b','c','d' ...
*q指向a[]数组,a[]数组没有结束符'\0'吗? 谁能不死 发表于 2019-11-11 17:05
*q指向a[]数组,a[]数组没有结束符'\0'吗?
。。。p指向a,q指向b,然后那个循环体*q刚好取不到\0 倒戈卸甲 发表于 2019-11-11 17:17
。。。p指向a,q指向b,然后那个循环体*q刚好取不到\0
*q,为什么会取不到‘\0’呢?*p 里面也没有‘\0’吗? 谁能不死 发表于 2019-11-11 17:37
*q,为什么会取不到‘\0’呢?*p 里面也没有‘\0’吗?
仔细阅读程序啊,for语句里把'\0'作为循环停止的条件了 倒戈卸甲 发表于 2019-11-11 17:51
仔细阅读程序啊,for语句里把'\0'作为循环停止的条件了
非常感谢 你 倒戈卸甲 发表于 2019-11-11 17:51
仔细阅读程序啊,for语句里把'\0'作为循环停止的条件了
因为看到有些不用刻意赋值‘'\0',好像也可以;主要是想不明白把‘\0’赋值过去,为什么不会把前面的值给覆盖了 本帖最后由 倒戈卸甲 于 2019-11-11 19:15 编辑
谁能不死 发表于 2019-11-11 18:02
因为看到有些不用刻意赋值‘'\0',好像也可以;主要是想不明白把‘\0’赋值过去,为什么不会把前面的值给 ...
我确实也见过不在末尾添加‘\0'也编译通过的情况,里面的门道比较复杂,我不敢随便回答,怕说错误导你。后一个问题很简单,因为for循环语句中的++q,就一定不会覆盖,而是把'\0'放到最后。因为q自加指向了下一个内存地址,但不符合判断条件什么都没做就退出了循环体,于是此时刚好可以被正常赋值
页:
[1]