问:2

dycdyc123 2001-07-29 11:05:10
char *buffer=new char(20);
int i=sizeof(buffer);
ShowMessage(IntToStr(i));
结果返回4!!!
为什么????
...全文
203 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjzhuang 2001-07-30
  • 打赏
  • 举报
回复
心情不好
twotrees 2001-07-29
  • 打赏
  • 举报
回复
同意和尚
luhongjun 2001-07-29
  • 打赏
  • 举报
回复
同意和尚。
aningstar 2001-07-29
  • 打赏
  • 举报
回复
同意和尚
new返回一个指针,它的值是该分配域的起始地址
所以只是sizeof(char),当然是4
xycleo 2001-07-29
  • 打赏
  • 举报
回复
buffer没用到!!!因为他是Char的!!所以是4
我不懂电脑 2001-07-29
  • 打赏
  • 举报
回复
sizeof(buffer)
计算的是buffer指针值(内存地址)32为4字节
dycdyc123 2001-07-29
  • 打赏
  • 举报
回复
Up
twotrees 2001-07-29
  • 打赏
  • 举报
回复
受教,受教
BLDai 2001-07-29
  • 打赏
  • 举报
回复
向 xycleo()虚竹和尚() 致敬!
xycleo 2001-07-29
  • 打赏
  • 举报
回复
对!!!是我错了!!!

谢谢各位!!!

sizeof确实返回了指针的大小!!!无论buffer是什么,他还是返回4
BLDai 2001-07-29
  • 打赏
  • 举报
回复
我也同意songhtao(三十年孤独)的说法,就是把buffer定义成一个类,它的返回值还是4!
 sizeof (keyword)
Returns the size, in bytes, of the given expression or type (as type size_t ).
如果是用new分配内存的话,返回的是指针的size,如果是一般的定义,返回的是它的字节数
class abc
{
int a,b, c;
char d;
};
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//abc *hello=new abc;
abc hello;
int i=sizeof(hello);
ShowMessage(IntToStr(i));
}
结果是16
xrbeck 2001-07-29
  • 打赏
  • 举报
回复
诶。指针一定是4个字节了。两个字节是段地址。两个是偏移地址。
xycleo()虚竹和尚() 虾哥说的
“buffer没用到!!!因为他是Char的!!所以是4”是什么意思呢。。小弟还不明白。。
new char(20)是赋初值的意思。把ASCII为20的字符赋给char.不过你的意思似乎应该
是new char[20];开20个单位。
dycdyc123 2001-07-29
  • 打赏
  • 举报
回复
Up
dycdyc123 2001-07-29
  • 打赏
  • 举报
回复
但此处char *buffer=new char(20);
buffer的空间是多少???是20*char 吗????

new char(20)是什么意思?????


Wingsun 2001-07-29
  • 打赏
  • 举报
回复
我也不同意

songhtao(三十年孤独)才是对的
seahorse 2001-07-29
  • 打赏
  • 举报
回复
和尚的不对!

所有指针的size都是4

和char无关!!

那个应该是sizeof(buffer[0])

songhtao(三十年孤独)是对的
我不懂电脑 2001-07-29
  • 打赏
  • 举报
回复
buffer用到了也一样sizeof(buffer)只是返回所指对象的地址,由于地址是32位的所以是4字节。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧