关于c语言的题目

如果char str【100】=“Hello”那么sizeof(str)=??再如果char str【】=“Hello”那么sizeof(str)=??另外一个问题 如果a=4,(a++)+=a是正确的表达式吗?如果不是为什么?,(++a)+=a是正确的表达式吗?如果是,又为什么,表达式的结果又是什么呢???

前者,你定义了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

追问

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输出结果又是多少呢?
我会提高悬赏值,请您帮忙解答~

追答

悬赏不是问题,重要的是你要懂。
这个问题,你可以放编译器里面试试就知道结果是多少

b是一个指针,sizeof一个指针,在32位的机器里面就是4,因为一个指针是4个字节的

追问

如果把*(++b)=’\0‘;这句话去掉,printf(”6:%d\n“,strlen(b));和printf(”6:%d\n“,sizeof(b));的结果分别是多少呢????

追答

你放编译器里面试试不就知道了

6:3
6:4
请按任意键继续. . .

指针sizeof永远是4(32位机器)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-21
首先 ,你得明白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.

两个结果一样,但是意义却完全不同啊

追问

如果a不是指针类型呢,sizeof应该为多少呢

追答

不是指针类型,你意思是什么,int,char,float,double类型么?
要看机器位长的,现在32位的机器上,他们分别占4,1,4,8字节。

追问

不是这个意思,我是说把此题目的char *a;改为char a【】;最后的printf(”6:%d\n“,sizeof(a));输出是多少呢

追答

了解你什么意思了,不过这个例子不太好,因为char a【】,定义数组的时候就要定义数组大小了。这个大小就是sizeof的值。
不知道你对堆和栈有没有了解,如果了解,那么记住:sizeof只计算栈上的空间。

追问

我对栈上空间这个词确实有点模糊,不过还是非常感谢您的回答!!!!

第2个回答  2012-09-21
sizeof(str) = 100

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

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

(++a)+=a是正确的表达式, ++a可以作为左值,结果应为 a= 9
第3个回答  2012-09-21
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、遇到问题,多上机,多想想为什么,想深刻点,祝你学业有成
第4个回答  2012-09-21
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输出结果又是多少呢?
我会提高悬赏值,请您帮忙解答~

第5个回答  2012-09-21
你上机试验下部就好了吗?
printf("%d",sizeof(str));
相似回答