鱼C论坛

 找回密码
 立即注册
查看: 2142|回复: 12

c语言指针 复制并覆盖问题!

[复制链接]
发表于 2015-6-15 12:50:53 | 显示全部楼层 |阅读模式
10鱼币
想问一下,我这种方法行吗? 为什么老师讲的都是一个字符一个字符用循环复制再输出。

#include<stdio.h>

void main()
{
        char *a="i love you baby!",
                *b="i do not love you!";
       
        b=a;
       
        printf("%s\n",a);
        printf("%s",b);
}

最佳答案

查看完整内容

妥妥的不行 a和b都是指针类型, 对于指针类型赋值操作符(=)的意义是改变指针的指向 即当进行b=a这个操作时, 相当于把指针b指向了a的地址, 即两者的输出都是"i love you baby!",编译器并不会只能的仅仅用一个=操作符便进行了字符串拷贝功能. 赋值一定要循环赋值, 利用每一个字符进行拷贝 并且, 还有一个最重要的一点 char* a = "i love you baby!"; 和 char a[] = "i love you baby!"; 是两个概念, 前者无法被赋值, 因为他 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-15 12:50:54 | 显示全部楼层
本帖最后由 ryxcaixia 于 2015-6-15 13:08 编辑

妥妥的不行
a和b都是指针类型, 对于指针类型赋值操作符(=)的意义是改变指针的指向
即当进行b=a这个操作时, 相当于把指针b指向了a的地址, 即两者的输出都是"i love you baby!",编译器并不会只能的仅仅用一个=操作符便进行了字符串拷贝功能.

赋值一定要循环赋值, 利用每一个字符进行拷贝
并且, 还有一个最重要的一点
char* a = "i love you baby!";
和 char a[] = "i love you baby!";
是两个概念, 前者无法被赋值, 因为他的字符串类型是const char* 即在内存中存在于符号表中为常量, 无法修改
第二个a可以被赋值, 因为它是一个字符数组(变量), 在内存位于栈上, 可以对里面的区域进行写入操作

楼主 对于字符串操作, 可以先记住这两句话
1. 如果是指针类型, =仅仅改变指向并不修改字符串的内容
2. 想要对字符串进行复制操作要利用strcpy等函数

评分

参与人数 1荣誉 +1 鱼币 +5 贡献 +1 收起 理由
onlyonewl88 + 1 + 5 + 1 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-6-15 13:25:41 | 显示全部楼层
谢谢!太给力了,我醍醐灌顶,想了好久。豁然开朗了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-15 13:42:07 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-15 16:06:29 | 显示全部楼层
亲亲!!悬赏的鱼币!酷爱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-15 16:06:30 | 显示全部楼层
亲亲!!悬赏的鱼币!酷爱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-15 16:06:50 | 显示全部楼层
悬赏的鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-16 23:15:16 | 显示全部楼层
不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-24 10:58:42 | 显示全部楼层
b = a 只是让b和a都指向同一个字符串(即a,b的值都是字符串"i love you baby!"的首地址)。打印出来当然都是"i love you baby!"了
但是复制的意义在于“由一个变成两个”,但是楼主这样执行后,内存中还是只有一个"i love you baby!",只不过b和a都是指向它的指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-29 10:28:21 | 显示全部楼层
这种方法可以,a,b输出结果一样。因为相当于a,b指向同一个字符串的首地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-6-30 23:13:03 | 显示全部楼层
是不行的,这只是改变了指针的指向
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-1 09:49:53 | 显示全部楼层
用string不就得了 再改 *b = *a;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-10-8 21:52:38 | 显示全部楼层
感谢楼主谢谢你 学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 11:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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