| 查看: 294 | 回复: 2 | |||
刘源416木虫 (正式写手)
至尊
|
[求助]
一道不懂得C语言题目 已有1人参与
|
|
#include <stdio.h> #include <stdlib.h> #include <string.h> struct stu { char *name, gender; int score; }; main() { struct stu a={NULL, 'm', 290}, b; a.name=(char *)malloc(10); strcpy(a.name, "Zhao" ;b = a; b.gender = 'f'; b.score = 350; strcpy(b.name, "Qian" ;printf( "%s,%c,%d,", a.name, a.gender, a.score ); printf( "%s,%c,%d\n", b.name, b.gender, b.score ); } 为什么a.name会被修改为Qian? |
» 猜你喜欢
085801 总分275 本科新能源 求调剂
已经有22人回复
298分 070300求调剂
已经有3人回复
材料与化工306分找调剂
已经有13人回复
070305高分子化学与物理 304分求调剂
已经有15人回复
260求调剂
已经有4人回复
299求调剂
已经有5人回复
求调剂求调剂
已经有7人回复
265求调剂
已经有15人回复
070300化学求调剂
已经有5人回复
296材料专硕求调剂
已经有13人回复

baghnac
金虫 (小有名气)
- 应助: 14 (小学生)
- 金币: 1706.4
- 红花: 6
- 帖子: 177
- 在线: 44小时
- 虫号: 1365578
- 注册: 2011-08-11
- 性别: GG
- 专业: 宇宙学
【答案】应助回帖
★ ★ ★
感谢参与,应助指数 +1
刘源416: 金币+3, ★有帮助 2015-08-03 07:08:50
感谢参与,应助指数 +1
刘源416: 金币+3, ★有帮助 2015-08-03 07:08:50
|
b = a; 这句不是很标准的C语言 有点像是C++的潜拷贝 效果为 b.name = a.name; b.gender = a.gender; b.score = a.score; 由于a.name 是一个指向malloc得到的地址,而b.name=a.name 这意味着b.name也指向同一地址 当你用strcpy(b.name, "Qian")修改b.name时,就会修改b.name指向的地址,由于a.name同时也指向同一地址,所以最后a.name也是"Qian" |

2楼2015-08-02 10:08:47
baghnac
金虫 (小有名气)
- 应助: 14 (小学生)
- 金币: 1706.4
- 红花: 6
- 帖子: 177
- 在线: 44小时
- 虫号: 1365578
- 注册: 2011-08-11
- 性别: GG
- 专业: 宇宙学
【答案】应助回帖
★ ★
刘源416: 金币+2, ★有帮助 2015-08-03 07:09:54
刘源416: 金币+2, ★有帮助 2015-08-03 07:09:54
|
struct stu { char *name, gender; int score; }; 这个问题出现name是一个指针,用指针本身语言上没限制,但是如果要将这个结构体传输,比如从一个exe传到另一个exe,那就会出现严重问题,因为name的内存与stu的内存完全独立,不连续,导致传输后的数据不可用! 重新定义结构如下,即可解决 struct stu { char name[10]; char gender; int score; }; 话说,就10个字节,还malloc 楼主是因为太关注内存浪费问题,还是??? |

3楼2015-08-02 10:12:42














;
回复此楼