1.关于数据类型的长度计算,即sizeof(); 需要注意编译机的struct内存对齐方式,是否是按照结构成员最大长度对齐方式?
- #include <stdio.h>
-
#include <string.h>
-
// sizeof 长度求解
-
int main()
-
{
-
char *p; // 4
-
char *q[20]; // 80
-
char *m[20][20]; // 1600
-
int (*n)[10]; // 4
-
-
struct MyStruct
-
{
-
char dda; // 1
-
char dda1; // 8
-
char dda2; // 8
-
char type ; // 4
-
};
-
-
struct MyStruct k; // 24
-
-
printf("%d--%d--%d--%d--%d--%d--%d--%d\n",
-
sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(k),
-
sizeof(k.dda),sizeof(k.dda1),sizeof(k.type));
-
-
return 0;
-
}
2. 关于负数在内存中的存储方式
即,负数是以补码的形式存在于内存中,
补码的计算:
取负数的绝对值,再将绝对值取反,最后加1;
如-15,绝对值为15( 0000 1111 ),取反为( 1111 0000), 加1( 1111 0001 ),最高位符号位(1)
- // 负数反码求解
-
int main()
-
{
-
char a[1000];
-
int i;
-
for(i=0; i<300; i++)
-
{
-
a[i] = -1-i;
-
printf("i = %d, a[%d] = %d, strlen(a) = %d\n",
-
i,i, a[i],strlen(a));
-
}
-
return 0;
-
}
3. 冒泡法的改进
- // 标志位flag减少了不必要的循环
- // 即,如果遍历比较数组有序,则不改变符号位,并中断外层循环
- // 由于c99之前,不包含bool变量,此处以int表示flag
- void bubble_sort( int a[], int len )
-
{
-
int i,j,tmp,flag;
-
for (i=len-1,flag=1; i>1 &&flag==1; --i )
-
{
-
flag = 0;
-
for (j=0; j<i; ++j )
-
{
-
if(a[j]>a[j+1])
-
{
-
tmp = a[j];
-
a[j] = a[j+1];
-
a[j+1] = tmp;
-
flag = 1;
-
}
-
}
-
}
-
}
-
-
int main()
-
{
-
int int_array[] = { 89, 2, 7, 5, 17, 57, 35, 89 };
-
int i;
- // 数组长度计算方式,需要注意 sizeof(int_array)/sizeof(int_array[0])
-
int len = sizeof(int_array)/sizeof(int_array[0]);
-
printf("sizeof(int_array) = %d\n", len);
-
for (i=0;i<len;i++)
-
{
-
printf( "int_array[%d] = %d\n", i, int_array[i] );
-
}
-
printf("start bubble sort\n");
-
bubble_sort( int_array, sizeof(int_array)/sizeof(int_array[0]) );
-
-
for (i=0;i<len;i++)
-
{
-
printf( "int_array[%d] = %d\n", i, int_array[i] );
-
}
-
return 0;
-
}
阅读(1474) | 评论(0) | 转发(1) |