| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 628 人关注过本帖
标题:内存的疑惑
只看楼主 加入收藏
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
结帖率:87.93%
收藏
已结贴  问题点数:20 回复次数:9 
内存的疑惑
范例
struct data{
   int ival;
   char *ptr;
};
data val2={1024,"Anna Livia Plurabelle"};
对于ptr的赋值是直接将指针指向字符串所占用的内存地址
还是先开辟内存存放字符串然后将指针指向 该字串的内存地址
应该怎样理解
搜索更多相关主题的帖子: 内存 
2010-03-08 11:30
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:5 
这是初始化,与赋值不同!

ptr的赋值是直接将指针指向字符串所占用的内存地址

★★★★★为人民服务★★★★★
2010-03-08 11:47
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
那你的意思是 需要分配内存空间
2010-03-08 14:07
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:5 
编译器会给字符串分配内存的。

data val2={1024,"Anna Livia Plurabelle"};
char *p="Anna Livia Plurabelle";

p和val2.ptr是指向同一个地址的!(VC编译器)

★★★★★为人民服务★★★★★
2010-03-08 16:26
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
怎么会这样呢
那如果两个对象指向同一个内存地址 如果释放其中的一个对象那岂不是会造成另一个指针无效吗 还是这个内存也有一个引用计数 释放其中的一个指针就减少一次引用计数
另外 这种情况是只对字符串常量 还是对所有的常量都是这样处理

2010-03-09 08:38
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
对了 现在这段代码是越看越问题多了
char *ptr照我的理解应该是一个char型的指针 对他的赋值应该是写成这样啊
char *ptr=&("Anna Livia Plurabelle") 怎么能直接将字符串赋给他
2010-03-09 08:41
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:5 
回到2楼看看----->这是初始化,与赋值不同!
.
.
char *ptr照我的理解应该是一个char型的指针 对他的赋值应该是写成这样啊
char *ptr=&("Anna Livia Plurabelle") 怎么能直接将字符串赋给他
.
.
可以在初始化的时候让一个字符指针指向一个字符串常量。
char *ptr = "Anna Livia Plurabelle";
.
.
结构体初始也就这样吧。。。
2010-03-09 22:08
buxinqiufeng
Rank: 2
等 级:论坛游民
帖 子:20
专家分:55
注 册:2009-3-3
收藏
得分:0 
楼上正解,初始化时候,系统系统会分配内存空间的,
2010-03-10 10:55
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:5 
char *p="Anna Livia Plurabelle";
像这种字符串编译器在生成可执行文件时,把它放在了只读数据段,执行时,也是把它放在数据段上,也就是说,这个字符串是不能够被改变的,用反汇编就可以看到;
还有我们在用"Anna Livia Plurabelle"时,"Anna Livia Plurabelle"代表的就是这段字符串的地址,你可以通过printf("0x%x\j", "Anna Livia Plurabelle")打印一下就知道了
2010-03-11 17:07
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
谢谢各位的解答
2010-03-12 16:59
快速回复:内存的疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023202 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved