鱼C论坛

 找回密码
 立即注册
查看: 1299|回复: 9

[已解决]指针 求解惑

[复制链接]
发表于 2019-11-10 14:13:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 谁能不死 于 2019-11-11 08:39 编辑

# include <stdio.h>

int main(void)
{
        char a[] = "fishc.com is a good web site !",b[40], *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';  为什么需要这行;这行有什么作用,老师视频中没有说,我也想不明白;哪位大神可以给说是怎么回事吗?
最佳答案
2019-11-11 17:51:03
谁能不死 发表于 2019-11-11 17:37
*q,为什么会取不到‘\0’呢?*p 里面也没有‘\0’吗?

仔细阅读程序啊,for语句里把'\0'作为循环停止的条件了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-11 08:38:21 | 显示全部楼层
发个求助帖也要审核几天吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-11 16:52:46 From FishC Mobile | 显示全部楼层
大家一般习惯于用char a[]="**gshbsvsh"这样的方式来初始化一个字符串,但如果是char a[]={'a','b','c','d','\0'}的方式来初始化,须以'\0'结尾。这个其实你应该有个大概印象才对,只是没特别注意。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-11 17:05:40 | 显示全部楼层
倒戈卸甲 发表于 2019-11-11 16:52
大家一般习惯于用char a[]="**gshbsvsh"这样的方式来初始化一个字符串,但如果是char a[]={'a','b','c','d' ...

*q指向a[]数组,a[]数组没有结束符'\0'吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-11 17:17:23 From FishC Mobile | 显示全部楼层
谁能不死 发表于 2019-11-11 17:05
*q指向a[]数组,a[]数组没有结束符'\0'吗?

。。。p指向a,q指向b,然后那个循环体*q刚好取不到\0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-11 17:37:33 | 显示全部楼层
倒戈卸甲 发表于 2019-11-11 17:17
。。。p指向a,q指向b,然后那个循环体*q刚好取不到\0

*q,为什么会取不到‘\0’呢?*p 里面也没有‘\0’吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-11 17:51:03 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
谁能不死 发表于 2019-11-11 17:37
*q,为什么会取不到‘\0’呢?*p 里面也没有‘\0’吗?

仔细阅读程序啊,for语句里把'\0'作为循环停止的条件了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-11 17:52:10 | 显示全部楼层
倒戈卸甲 发表于 2019-11-11 17:51
仔细阅读程序啊,for语句里把'\0'作为循环停止的条件了

非常感谢 你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-11 18:02:27 | 显示全部楼层
倒戈卸甲 发表于 2019-11-11 17:51
仔细阅读程序啊,for语句里把'\0'作为循环停止的条件了

因为看到有些不用刻意赋值‘'\0',好像也可以;主要是想不明白把‘\0’赋值过去,为什么不会把前面的值给覆盖了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-11 18:10:30 From FishC Mobile | 显示全部楼层
本帖最后由 倒戈卸甲 于 2019-11-11 19:15 编辑
谁能不死 发表于 2019-11-11 18:02
因为看到有些不用刻意赋值‘'\0',好像也可以;主要是想不明白把‘\0’赋值过去,为什么不会把前面的值给 ...


我确实也见过不在末尾添加‘\0'也编译通过的情况,里面的门道比较复杂,我不敢随便回答,怕说错误导你。后一个问题很简单,因为for循环语句中的++q,就一定不会覆盖,而是把'\0'放到最后。因为q自加指向了下一个内存地址,但不符合判断条件什么都没做就退出了循环体,于是此时刚好可以被正常赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 12:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表