中易网

请问sizeof("abcdefg"+'2')的值是多少

答案:6  悬赏:80  
解决时间 2021-12-14 16:28
请给出详细解释,谢谢先
首先谢谢的回答,但是还是有些模糊。
我看楼下有兄弟说sizeof(“abcdefg”+'2' +‘2’)的值为4,不知道是否正确,如果是的话,对sizeof的理解就更麻烦了啊,是否有sizeof的标准文档来说明编译器的处理方式呢,谢谢。
最佳答案
占个位置 我说说我的看法

昨天占了位置 今天说说
johnbiter 的库函数说是不正确的 sizeof是运算符 不是函数

我认同QQ_qmin的理解

先说下
double a;
int b;
sizeof(a+b)我想毫无疑问是8
sizeof(a+b+b)也还是8 不会有问题
sizeof(a+'b'+'b')是8应该也不会有问题吧

楼主sizeof问题特殊在"abcdefg"上 这是个const char数组
也就是个静态数组 我认为sizeof求静态数组实际上是没有意义的

如果不是静态数组
int data[10];
cout< 结果应该是4 返回一个指针的类型大小,像上面QQ_qmin的理解那样

静态数组的大小是一定的 按照C++的原则 程序员是知道而且一定知道静态数组的大小的 所以在用sizeof应该没什么意义

所以类似sizeof("abcdefg" + '2')到底是指针还是静态数组的大小都无所谓。具体是否与编译器有关也不得而知,我记得以前C里sizeof('2')是等于2的 也就是一个整形的占用大小~
////////////////////////////////////////////////////////
又要修改回答了
QQ_qmin后面的理解是错误的
char p[] = "abcdefg";
sizeof(p)//结果是8
sizeof(p+2)//结果是4,此时p被看为指针。
如果照此说
sizeof(p)=sizeof("abcdefg")
而sizeof(p+2)=sizeof("abcdefg"+2)

结果恰恰不是。sizeof(p+2)不等于sizeof("abcdefg"+2)
char p[] = "abcdefg";的"abcdefg"是p的初始化器,不是静态字符数组
,是不放在堆中的。
//引用下///////////////////////////////引用下
“abcdefg”+'2' 实际上是对指针+50
对于编译器来说
int a[8] = "abcdefg";
a+50;//p变了吗? p 根本没有变
///////////////////////////////////
为什么加50没有变 在加50就变了呢?
而不像我上面diuble类型那样 一直不变呢?
全部回答
#include"stdio.h" main() {int t; t=sizeof("abcdefg"+'2'); printf("%d",t); } 8楼下说的没错。
只知道是8 abcdefg”+'2' +‘2’结果是4又怎么解释呢? 高手,i 服了
sizeof()库函数,只是算出变量类型所占地址空间大小的, 和变量的具体的值是没有关系的. sizeof("abcdefg" + '2') -〉char *b; b= "abcdefg" + '2'; sizeof(b); 应为b是char类型的,只给他分配四个字节的地址空间,所以结果肯定是4,如果你是32位机器的话。
结果为:8 和10 一个字符占一个字节,sizeof就是求所占的字节数的。 a编译会自动在后面添加一个'\0'表示结束符,所以为 7+1=8。 b是一个静态数组,里面的10表示其元素的个数,系统分配的时候按照这个来分配。
不同意上面的答案,abcdefg是7个字节,但字符串有结束符'\0',sizeof("abcdefg")一定也是8,并不是因为加了‘2’ 原因应该是因为sizeof是在预编译阶段计算,他不需要知道操作数具体的值,只需要知道操作数的类型,因为类型“abcdefg”的字节数是8,对编译器来说,加上任何数字('2'实际是ascll码50)都不能改变“abcdefg”的类型,所以答案是8 “abcdefg”+'2' 实际上是对指针+50 对于编译器来说 int a[8] = "abcdefg"; a+50;//p变了吗? p 根本没有变 sizeof(a)//这个值应该是多少? 是8对吧!! :) sizeof("abcdefg"+'2'+'2')首先要明白对于编译器来说他计算的是什么的,上面的式子可以用什么来替换,我是替换成sizeof(("abcdefg"+‘2’)+‘2’),那么sizeof中操作数应该是什么的结果?是"abcdefg"+'2'的结果,对于一个字符串加‘2’,在编译器认为是对指针加'2',所以sizeof操作数是一个指针,所以结果为4, 我们换个形势看这个问题, char p[] = "abcdefg"; sizeof(p)//结果是8 sizeof(p+2)//结果是4,此时p被看为指针。 继续跟进这个问题的答案。 "abcdefg"字符串常量开始的时候是不会在内存中分配地址的,只有对它进行需要取地址的操作后才能让字符串常量在内存中占有一定的地址。 所以第一次的+'2'操作只是让"abcdefg"字符串在内存中分配一定的地址,但sizeof的操作数还是字符串(即此时的操作类似与char p[]= "abcdefg"; sizeof(p);), 第二次加'2'才是对数组名加'2' 把我觉得例子稍写的更清晰点是: char p[] = "abcdefg"; sizeof("abcdefg")//结果是8 sizeof(p)//结果是8,相当于sizeof("abcdefg"+'2'); sizeof(p + '2')//结果是4,相当于sizeof("abcdefg"+'2'+'2');
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
百變的意思是什么?百變的释义是什么啊?
塔塔米的意思是什么啊?请解释下!
有些中级的碟刹上有个红色部件?是干什么左右
打算上一个烘干塔,不知道是烘干塔连续的好还
有没有书籍关于如何把代码写的更加规范,更加
刺柏的意思是什么?刺柏的释义是什么啊?
鼻涕團的意思是什么?鼻涕團的释义是什么啊?
流放之路憎恨愤怒对图腾有用吗
三盆手的意思是什么啊?请解释下!
股票可以指定A账户卖给B账户吗?
是不是只有过了军检线才可以报公办二本?应该
高安办理迁移证需要什么资料,一定要本人回去
蜂鬚花嘴的意思是什么?蜂鬚花嘴的释义是什么
淘宝店铺重复铺货的的2款产品删掉其中一个会
浄域的意思是什么啊?请解释下!
推荐资讯
煎沸的意思是什么啊?请解释下!
思忖的意思是什么?思忖的释义是什么啊?
老瓦的意思是什么?老瓦的释义是什么啊?
用"看到了"做为排比词造句
安康有学韩语的地方莫
科尔维特二手车在美国卖多少钱
簸羅迴的意思是什么?簸羅迴的释义是什么啊?
红狗85带什么装备最好
得过细小的狗狗还得从新打疫苗,但是多久后打
少女时代的腹肌,怎么有时候在看他们跳舞时没
藩篱草的意思是什么啊?请解释下!
虔懇的意思是什么?虔懇的释义是什么啊?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?