关于c语言的题目

如果charstr【100】=“Hello”那么sizeof(str)=??再如果charstr【】=“Hello”那么sizeof(str)=??另外一个问题如果a=4... 如果char str【100】=“Hello”那么sizeof(str)=??再如果char str【】=“Hello”那么sizeof(str)=??另外一个问题 如果a=4,(a++)+=a是正确的表达式吗?如果不是为什么?,(++a)+=a是正确的表达式吗?如果是,又为什么,表达式的结果又是什么呢??? 展开
 我来答
夏水秋池
2012-09-21 · TA获得超过191个赞
知道答主
回答量:39
采纳率:0%
帮助的人:60.9万
展开全部
前者,你定义了str的大小为100,因此sizeof(str) 就是100
后者,你没显式定义str的大小,系统在定义的时候帮你定义了6个字节的大小,分别放5个字符和字符串结束符 '\0' ,因此sizeof(str)就是6

a++是右值,不能放在等号左边,因此(a++)+=a;是错误的
++a可以是左值,因此可以放等号左边,(++a)+=a;是正确的,a的结果是10,先计算++a,a=5,然后a+=a,a=10
相当于:
++a;
a+=a;
更多追问追答
追问
那(++a)+=(a++)能不能具体分解一下步骤???结果又是多少呢
追答
还是不要纠结这样的问题了吧,这样的问题毫无意义,在实际变成中也不会用到,不过你问到了,我还是给你解释吧

(++a)+=(a++);
相当于3句:
++a; // a=5
a += a; // a=10
a++; // a=11
weichang0829
2012-09-21 · TA获得超过4764个赞
知道大有可为答主
回答量:2966
采纳率:33%
帮助的人:995万
展开全部
首先 ,你得明白sizeof和strlen的区别。
sizeof计算实际开辟的存储空间,二strlen只会计算'\0'前面的字符个数,注意不包括’\0‘。

另外,(++a)和(a++),只有++a可以作为左值,所以(++a)+=a正确,答案是先算++a,a=5,然后,计算a=a+a,所以是10.
更多追问追答
追问
char *a;
char *b;
char c【】=“LUCENT”;
a=malloc(7);
strcpy(a,c);
b=a+sizeof(c)-4;
*(++b)=’\0‘;
printf(”6:%d\n“,strlen(b));如果把strlen改为sizeof输出结果又是多少呢?
我会提高悬赏值,请您帮忙解答~
追答
应该写错了,printf(”6:%d\n“,strlen(a ));才有意义啊

恩,输出strlen(a)到\0就会截止,所以,输出是:4.

如果换成sizeof,因为a是指针类型,sizeof计算的是指针类型的空间大小,而不是指针指向内存空间的大小,所以,不管指向多少内存,sizeof都是4.

两个结果一样,但是意义却完全不同啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kenlee_gz
2012-09-21 · TA获得超过494个赞
知道小有建树答主
回答量:457
采纳率:33%
帮助的人:351万
展开全部
sizeof(str) = 100

如果char str【】=“Hello”那么sizeof(str)= 6

(a++)+=a不是正确的表达式,因a++不能作为左值

(++a)+=a是正确的表达式, ++a可以作为左值,结果应为 a= 9
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是菜鸟135
2012-09-21
知道答主
回答量:27
采纳率:0%
帮助的人:18.8万
展开全部
1、char str【100】=“Hello”中sizeof(str)=100
解答:char str【100】中声明了字符数组空间100个字节,所以答案为100,如果去掉数组中下标100,那么sizeof()结果就为“HELLO”占用空间字节数+'\0'即6。,就是说你要多少我给你申请多少。

2、a=4,(a++)+=a表达式是有问题的,a++不能作为左值,不要对a++进行赋值,a++ 返回的是一个临时的值,而不是a变量本身,所以不能对a++赋值,而++a是先进行了a=a+1=5运算,a变量中存放的是已定值5,可以对变量a进行赋值。计算结果为10

3、遇到问题,多上机,多想想为什么,想深刻点,祝你学业有成
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhwelong
2012-09-21
知道答主
回答量:40
采纳率:0%
帮助的人:25.2万
展开全部
char str[100] = "Hello" sizeof(str) = 100; str被定义为100个字节的字符数组
char str[] = "Hello" sizeof(str) = 6; str未定义长度,但有初始化且加上'\0'
a=4,(a++)+=a 是错误的,因为a++后 a的值是5,是常量,不能在对a++赋值。
追问
char *a;
char *b;
char c【】=“LUCENT”;
a=malloc(7);
strcpy(a,c);
b=a+sizeof(c)-4;
*(++b)=’\0‘;
printf(”6:%d\n“,strlen(b));如果把strlen改为sizeof输出结果又是多少呢?
我会提高悬赏值,请您帮忙解答~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fengyu8881
2012-09-21 · TA获得超过139个赞
知道答主
回答量:239
采纳率:0%
帮助的人:129万
展开全部
你上机试验下部就好了吗?
printf("%d",sizeof(str));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式