C语言 day11

2022-06-24  本文已影响0人  y_7539

数据的存储

数据在内存中以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);
}
上一篇 下一篇

猜你喜欢

热点阅读