鱼C论坛

 找回密码
 立即注册
查看: 5160|回复: 22

这个简短的程序你看得懂么?

[复制链接]
发表于 2011-12-28 01:33:13 | 显示全部楼层 |阅读模式

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

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

x
一下程序是否可行,我看不懂,请大家来说说

#include <stdio.h>
#include <string>
main()
{
        char *p1,*p2,str[50]="ABCDEFG";
        p1="abcd";
        p2="efgh";
        strcpy(str+1,p2+1);
        strcpy(str+3,p1+3);
        printf("%s\n",str);
}

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-28 01:50:19 | 显示全部楼层
可以。主要注意下:str里是可改变的数组内容,p1,p2指向的是常数。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-28 02:21:19 | 显示全部楼层
p1="abcd";
p2="efgh";
p1,p2不是地址么,右边怎么能给常量呢?就是这里我有疑问?因为我们一般都是给地址给指针变量啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-28 08:40:58 | 显示全部楼层
"abcd"这个是字符数组,退化为指针(指向数组的首元素)
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-28 09:40:22 | 显示全部楼层
:dizzy::dizzy:
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-28 16:52:07 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-28 16:08:17 | 显示全部楼层
我上机调试的是: str+1=BCDEFG ,P2+1=fgh  这是为什么啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-28 16:08:48 | 显示全部楼层
仰望天上的光 发表于 2011-12-28 08:40
"abcd"这个是字符数组,退化为指针(指向数组的首元素)


我上机调试的是: str+1=BCDEFG ,P2+1=fgh  这是为什么啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-28 16:47:44 | 显示全部楼层
这个声明语句#include <string>
为什么不是string.h也可以编译通过?????

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-28 17:00:36 | 显示全部楼层
seuer126 发表于 2011-12-28 16:08
我上机调试的是: str+1=BCDEFG ,P2+1=fgh  这是为什么啊

str是数组名
表达式str+1中str先退化为指针(指向数组首元素'A'),这个指针+1就是指向该数组的下一个元素'B'
调试的时候会将从该指针开始一致显示到字符'\0'
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-29 09:54:27 | 显示全部楼层
仰望天上的光 发表于 2011-12-28 17:00
str是数组名
表达式str+1中str先退化为指针(指向数组首元素'A'),这个指针+1就是指向该数组的下一个元 ...

原来这样啊,谢谢啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-29 10:16:14 | 显示全部楼层
seuer126 发表于 2011-12-29 09:54
原来这样啊,谢谢啊

还有一点我想问的是, 这个strcpy(s1,s2)函数, 其实就是s2覆盖到s1吧。 上面那个程序 第一个函数strcpy(str+1,p2+1) 执行完之后, p2+1=fgh, 而此时的str调试结果为 Afgh, 而我理解是fgh(不是完全是赋值给st了吗r?) 第二个函数执行完之后,而此刻p1+3=d, 而此时的str的调试结果为Afgd, 而我的理解是d(理由跟前面一样)。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-29 10:17:15 | 显示全部楼层
学习一下!!!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-1 21:10:10 | 显示全部楼层
每天有新收获
小甲鱼最新课程 -> https://ilovefishc.com
头像被屏蔽
发表于 2012-1-2 18:38:44 From FishC Mobile | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-2 23:28:40 | 显示全部楼层
:L 这个真看不懂
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-1-3 10:47:14 | 显示全部楼层
seuer126 发表于 2011-12-28 16:08
我上机调试的是: str+1=BCDEFG ,P2+1=fgh  这是为什么啊

不是啊吧,我的和你不一样,第一个
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-3 11:52:17 | 显示全部楼层
strcpy() 的使用 第一个参数要有足够第二个参数存放的空间  字符串从开始一直到 ‘\0’   而且对存储的话要懂得数据在内存中存储的方式 和指针的运用
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-4 17:47:19 | 显示全部楼层
目测是Afgd 。。。不知道对不对
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-4 20:19:17 | 显示全部楼层
seuer126 发表于 2011-12-28 16:08
我上机调试的是: str+1=BCDEFG ,P2+1=fgh  这是为什么啊

这个我貌似知道,就是指针的移动把,str+1,就是指ABCDEFG中从B开始,往后指,而你打印的话,就是从B后面打印出来~~~
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-10 12:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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