sizeof


#include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 char a[1000];
6 int i;
7 for (i=0 ; i <1000; i++)
8 {
9 a[i] = -1-i;
14 }
15 printf ("%d\n", strlen(a));
16 return 0;

17 }

这段程序值得深入研究

首先,,测定数组长度用strlen函数,,,这个函数的要求是只能字符数组的长度,所以当你想判断整形数组的长度时就不能运用这个函数

2这里可以看到对字符数组赋值整数,,是强制类型转换,,,字符和整形是一直可以通用的

3也就是这个程序的本质:这个程序最后的输出是多少???

答案是255(在32位系统上)

-1,-2,,,,,-128,127,126,,,,1

这是正确的输出

这样的原因是:-1到-128,,,,,,127是char型表示的最大数,这时输出的值为-128,然后溢出char型最小整数为-128,输出为127这样一直类推到第255个数是1第266个数是0

这样字符数组结束的标志是“\0”就有了本程序的答案。。。

判断字符数组是否0为结束标志:

  1 #include <stdio.h>
  2 #include <string.h>
  3 int main()
  4 {
  5         char a[10];
  6         int i;
  7         for (i=1; i<10; i++)
  8         {
  9                 a[i] = i;
 10         }
 11         a[0] = 0;
 12         printf ("%d\n", a[0]);
 13         int w = strlen (a);
 14         printf ("%d\n", w);
 15 }
 16 

这样可以看到输出是0,0原因是字符数组的第一个字符是0故字符长度为0

******************************************************************************************************************************

根据以上讨论及程序实验发现+0和-0在内存中的表示方法是一样的,,,都是全部为0.

¥¥¥¥¥¥4¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

  1 #include <stdio.h>
  2 int main()
  3 {
  4    char f = 127;
  5    f += 1;
  6    printf ("%d\n", f);
  7    f =128;
  8    f += 1;
  9    printf ("%d\n", f);
 10    f = -127;
 11    f -= 1;
 12    printf ("%d\n", f);
 13    f = -128;
 14    f -= 1;
 15    printf ("%d\n", f);
 16    f = 127;
 17    printf ("%d\n", (++f));
 18    f = 127;
 19    printf ("%d\n", f+1);
 20    f = 127;
 21    f = f+1;
 22    printf ("%d\n", f);
 23 }
 24

这段程序中输出的结果可以看到在32位系统中char的表示范围是-128---127

但是在最后三次的输出中会比较出++f和f=f+1再输出都符合这样的规则,,,但是如果输出是printf ("%d\n", f+1);则会输出128

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

  1 #include <stdio.h>
  2 int main ()
  3 {
  4         int i = -20;
  5         unsigned j = 10;
  6         int h;
  7         h = i+j;
  8         printf ("%d\n", h);
  9         printf ("%u\n", h);
 10         h = 4294967296;
 11         printf ("%u\n", h);
 12         h = 4294967295;
 13         printf ("%u\n", h);
 14         char c = 127;
 15         printf ("%d\n", c);
 16
 17 }

这段程序中开始看的是输出的方式,,,如果以有符号整形输出-10正常,,,如果以无符号整形输出在32位系统中最大的是 4294967296这样加-10就4294967286

还可以看出:

当输出4294967296时输出的则是0 。。。。也就是无符号数最大输出4294967295

##############################################################################################

#include <stdio.h>
  2 int main()
  3 {
  4         unsigned i;
  5         for (i=9;i>=0;i--)
  6         {
  7                 printf ("%u\n", i);
  8         }
  9 }
~          
这段代码中到达4294967296后就是0,然后又出来逐渐递减。。。。。。。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值