char *p = "OK",sizeof(p)为什么是4?

AresFriend 2010-11-29 10:22:05
char *p = "OK",sizeof(p)为什么是4?
如果是直接sizeof("OK")则为3。

这是什么原理啊,我看了MSDN,也看不明白。。。
...全文
1601 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
tujiawei2006412212 2010-12-02
  • 打赏
  • 举报
回复
因为p是指针,是一个地址,
如果你机器是32位的话, 地址就是4个字节,
如果是64位的话, 地址就是8个字节,
根据机器的位数的不同, 得出的结果也不同
寂寞的泡面 2010-11-29
  • 打赏
  • 举报
回复
char * p="OK";
strlen(p)等于3('O','K','\0')。
sizeof(p)等于4,因为p是一个字符指针,指针的长度为4个字节。
对于char p[3]="OK";
strlen(p)等于3('O','K','\0')。
sizeof(p)等于3,因为p是一个字符数组的首地址。sizeof(p)表示此段连续地址的长度。
楼主可以参考一下我写的关于数组的文章。http://blog.csdn.net/piaojun_pj/archive/2010/10/03/5919661.aspx
wyfwx 2010-11-29
  • 打赏
  • 举报
回复
指针类型在32bit机器上就是4byte
失落的凡凡 2010-11-29
  • 打赏
  • 举报
回复
p是一个指针,32位的系统里指针一般大小就是4。
"OK"是一个字符串字面值,而C中的字符串实际是用char的数组表示的,这里是一个char[3],存贮了{'O', 'K', '\0'}
fq8345893371 2010-11-29
  • 打赏
  • 举报
回复
32位机器就是4个字节
無_1024 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sc_valentine21 的回复:]
sizeof(p);p是指针,所以为4。
sizeof("OK")为3,是因为'O''K''\n',所以为3。
[/Quote]
是这样的
就想叫yoko 2010-11-29
  • 打赏
  • 举报
回复
指针类型为int
一切对指针求sizeof都是int大小
wen_eric 2010-11-29
  • 打赏
  • 举报
回复
指针变量也是一个变量啊,他也需要内存给他分配内存空间的。C++规定,在32机器中,只要是指针变量都是占4个字节的空间。[Quote=引用 2 楼 aresfriend 的回复:]
我还没发过贴呢,当然是0了,嘿嘿。。

请教一下,指针的空间是怎么回事?指针的空间为什么是4啊?根据什么决定的??

谢谢了。。。
[/Quote]
qidongstudy 2010-11-29
  • 打赏
  • 举报
回复
sizeof(参数) ,求的是占用的空间的。
sizeof(p),这并不是求出p指向的内容,而是看p是指针,大小为4 ,因此得4
而你问指针为什么大小是4,这……要问微软了,是微软定义了sizeof(int)==4,,sizeof(char)==1的……
gules 2010-11-29
  • 打赏
  • 举报
回复
仔细区分“字符指针对象(变量)”与“字符数组对象(数组名)”及数组名何时退化为指针类型。
renyaoming2020 2010-11-29
  • 打赏
  • 举报
回复
楼主说的我也最近刚学过

sizeof p
p是一个指针,也就是一个地址,也就是一个地址在内存中的字节数,所以是4,如果想知道p所指的对象的长度,可以用sizepf *p

17楼所说的情况,p为数组,当用sizeof p时,数组并没有转化为指针,它求的是整个数组的字节数3(包括'k'后面的'\0'),因此sizeof还有个作用就是求数组的元素个数,注意这里是元素('\0')
sizeof p/sizeof *p,啰嗦一句sizeof返回值类型是size_t,返回值为编译时常量
bcj00000 2010-11-29
  • 打赏
  • 举报
回复

指针占用空间就是4 字节,
你sizeof(指针) 当然是4了

zongzihe 2010-11-29
  • 打赏
  • 举报
回复
在32位机子上,指针的大小是4字节,每字节8位,4*8=32。

#include <iostream>
int main(void)
{
char p[] = "OK";
std::cout << sizeof(p) <<std::endl;
return 0;
}

输出3。
dingshaofengbinbin 2010-11-29
  • 打赏
  • 举报
回复
指针当然是4了!!
youzhengdu 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wen_eric 的回复:]
知道为什么吗?
因为你的结帖率为零。
哈哈
顺便提示你一下:sizeof(p);求出的是指针的空间。不是字符串的空间。
[/Quote]
说的好 关键地方呵呵
youzhengdu 2010-11-29
  • 打赏
  • 举报
回复
存储指针的时候 32位系统则为4个字节,64位下是8个字节 sizeof 的用法就是求他参数的存储大小的 。你的参数是 p 此时p是一个指针 也就是地址 所以是4 而你的参数是字符串的时候 c++ 认为是字符的数组不过后面有一个结尾符所以总共是3. 回答的详细不 结帖吧 有点饿了
AresFriend 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 huangyong19870618 的回复:]

sizeof算的是那个字符指针的长度 你用strlen试试撒!
[/Quote]

谢谢,我不是为了算字符串长度,只是想了解一下sizeof的用法。。。。
AresFriend 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhao4zhong1 的回复:]

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
[/Quote]

谢谢提醒,我也知道那么做,不过俺可不懂汇编。。。
bean11222 2010-11-29
  • 打赏
  • 举报
回复
sizeof算的是那个字符指针的长度 你用strlen试试撒!
赵4老师 2010-11-29
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
加载更多回复(16)

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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