Chinaunix首页 | 论坛 | 博客
  • 博客访问: 138987
  • 博文数量: 36
  • 博客积分: 1180
  • 博客等级: 少尉
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-30 10:21
文章分类

全部博文(36)

文章存档

2012年(1)

2011年(21)

2010年(14)

分类: C/C++

2011-08-30 14:41:16

1.关于数据类型的长度计算,即sizeof();
  需要注意编译机的struct内存对齐方式,是否是按照结构成员最大长度对齐方式?
  1. #include <stdio.h>
  2. #include <string.h>
  3. // sizeof 长度求解
  4. int main()
  5. {
  6.     char *p; // 4
  7.     char *q[20]; // 80
  8.     char *m[20][20]; // 1600
  9.     int (*n)[10];     // 4

  10.     struct MyStruct
  11.     {
  12.         char dda;    // 1
  13.         char dda1;    // 8
  14.         char dda2;    // 8
  15.         char type ;    // 4
  16.     };
  17.     
  18.     struct MyStruct k; // 24

  19.     printf("%d--%d--%d--%d--%d--%d--%d--%d\n",
  20.         sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(k),
  21.         sizeof(k.dda),sizeof(k.dda1),sizeof(k.type));

  22.     return 0;
  23. }

2. 关于负数在内存中的存储方式
 
即,负数是以补码的形式存在于内存中,
  补码的计算:
    取负数的绝对值,再将绝对值取反,最后加1;
    如-15,绝对值为15( 0000 1111 ),取反为( 1111 0000), 加1( 1111 0001 ),最高位符号位(1)
  1. // 负数反码求解
  2. int main()
  3. {
  4.     char a[1000];
  5.     int i;
  6.     for(i=0; i<300; i++)
  7.     {
  8.         a[i] = -1-i;
  9.         printf("i = %d, a[%d] = %d, strlen(a) = %d\n",
  10.             i,i, a[i],strlen(a));
  11.     }
  12.     return 0;
  13. }

3. 冒泡法的改进
  1. // 标志位flag减少了不必要的循环
  2. // 即,如果遍历比较数组有序,则不改变符号位,并中断外层循环
  3. // 由于c99之前,不包含bool变量,此处以int表示flag
  4. void bubble_sort( int a[], int len )
  5. {
  6.     int i,j,tmp,flag;
  7.     for (i=len-1,flag=1; i>1 &&flag==1; --i )
  8.     {
  9.         flag = 0;
  10.         for (j=0; j<i; ++j )
  11.         {
  12.             if(a[j]>a[j+1])
  13.             {
  14.                 tmp = a[j];
  15.                 a[j] = a[j+1];
  16.                 a[j+1] = tmp;
  17.                 flag = 1;
  18.             }
  19.         }
  20.     }
  21. }

  22. int main()
  23. {
  24.     int int_array[] = { 89, 2, 7, 5, 17, 57, 35, 89 };
  25.     int i;

  26.     // 数组长度计算方式,需要注意 sizeof(int_array)/sizeof(int_array[0])
  27.     int len = sizeof(int_array)/sizeof(int_array[0]);
  28.     printf("sizeof(int_array) = %d\n", len);
  29.     for (i=0;i<len;i++)
  30.     {
  31.         printf( "int_array[%d] = %d\n", i, int_array[i] );
  32.     }
  33.     printf("start bubble sort\n");

  34.     bubble_sort( int_array, sizeof(int_array)/sizeof(int_array[0]) );

  35.     for (i=0;i<len;i++)
  36.     {
  37.         printf( "int_array[%d] = %d\n", i, int_array[i] );
  38.     }
  39.     return 0;
  40. }



阅读(1423) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~