数据的存储
数据在内存中以2进制的形式存储
整数在内存中存的是二进制的补码
大小端
大端字节序:把数据的低位字节序的内容放在高地址处,高位字节序的内容放在低地址处
小端字节序:把数据的低位字节序的内容放在低地址处,高位字节序的内容放在高地址处
//判断大小端
int main()
{
int a = 1;
char* p = (char*)&a;
if (*p == 1)
printf("小端");
else
printf("大端");
return 0;
}
char到底是有符号还是无符号,取决于编译器
有符号的char取值范围是-128~127
浮点数存储
(-1)S*M*2E
S符号位,1bit,正数写0,负数写1
M 23bit,小数点后面的数,后面补0
E 8bit,指数加中间数127 或者 1023
数组指针
int main()
{
int arr1[] = { 1, 2, 3, 4, 5 };
int arr2[] = { 2, 3, 4, 5, 6 };
int arr3[] = { 3, 4, 5, 6, 7 };
int* arr[] = { arr1, arr2, arr3 };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
printf("%p\n", arr[i]);
for ( j = 0; j < 5; j++)
{
printf("%d ", *(arr[i]+j)); //arr起始位地址
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
数组名是数组首元素的地址
有两个例外:
sizeof(数组名) 表示整个数组,计算的是整个数组大小
&数组名 表示整个数组,取出整个数组的地址
二维数组的数组名表示首元素的地址,二维数组的首元素是第一行
void print2(int(*p)[5], int r, int c)
{
int i = 0;
int j = 0;
for (i = 0; i < r; i++)
{
for (j = 0;j < c;j++)
{
printf("%d ", (*(*p + i) + j)); //*p arr每一行的指针 *(*p + i)每行下每一列的指针
}
printf("\n");
}
}
int main()
{
int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
print2(arr, 3, 5);
}
网友评论