| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 975 人关注过本帖
标题:二维数组、指针数组、数组指针、结构体位操作联合等,大家有兴趣的可以共同 ...
只看楼主 加入收藏
Mrluoyuzhao
Rank: 1
等 级:新手上路
帖 子:5
专家分:7
注 册:2021-9-1
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:1 
二维数组、指针数组、数组指针、结构体位操作联合等,大家有兴趣的可以共同进步
/*
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。以下面的二维数组 a 为例:
int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
但在内存中,a 的分布是一维线性的,整个数组占用一块连续的内存:
int (*p)[4] = a;
a+i == p+i  a = &a[0]  a[0] = &a[0][0]
a[i] == p[i] == *(a+i) == *(p+i)
a[i][j] == p[i][j] == *(a[i]+j) == *(p[i]+j) == *(*(a+i)+j) == *(*(p+i)+j)
什么类型付相关类型的指针
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct {
    unsigned int a : 4;
    unsigned int b : 8;
    unsigned int c : 16;
    unsigned int d : 14; // 这里14bit超出u32,放在下个结构体内,实际结构体内只有28bit内存
} STRUCT0;

typedef struct a {
    int a;
    char b;
    long c;
    short d;
}STRUCT1;

typedef union b {
    STRUCT0 h;
    int hh;
} UNION;

int main()
{
    int intbuf[2][3] = {0, 1, 2, 3, 4, 5};
    char charbuf[2][3] = {'a', 'b', 'c', 'd', 'e', 0};
    int *inbuf[2];
    inbuf[0] = intbuf[0];
    inbuf[1] = intbuf[1];
    printf("%p,%p,%p,%d,%d,%d\n", \
           inbuf[0], inbuf[0] + 1, inbuf[1], *(inbuf[0] + 1), *inbuf[0], *inbuf[1]);
    printf("%d\n", sizeof(inbuf[0]));
    char *chbuf[2];
    chbuf[0] = charbuf[0];
    chbuf[1] = charbuf[1];
    printf("%p,%p,%p,%d,%c,%d\n", \
           chbuf[0], chbuf[0] + 1, chbuf[1], *(chbuf[0] + 1), *chbuf[0], *chbuf[1]);
    printf("%d\n", sizeof(chbuf[0]));
    // int *ibuf[] ibuf[][]
    int (*ibuf)[3];
    char (*cbuf)[3];
    ibuf = intbuf;
    cbuf = charbuf;
    printf("%p,%p,%p,%d,%d,%d\n", \
           ibuf[0], ibuf[0] + 1, ibuf[1], *(ibuf[0] + 1), *ibuf[0], *ibuf[1]);
    printf("%p,%p,%p,%s,%d,%d\n", \
           cbuf[0], cbuf[0] + 1, cbuf[1], cbuf[0], *cbuf[0], *cbuf[1]);
    printf("%d,%d\n", sizeof(cbuf), sizeof(cbuf[0]));
    // int (*iibuf)[2];err
    int **iibuf;
    // char (*ccbuf)[2];err
    char **ccbuf;
    iibuf = inbuf;
    ccbuf = chbuf;
    printf("%p,%p,%p,%d,%d,%d\n", \
           iibuf[0], iibuf[0] + 1, iibuf[1], *(iibuf[0] + 1), *iibuf[0], *iibuf[1]);
   
    STRUCT0 t0 = {
        .a = 0xf,
        .d = 0xf,
        .c = 0xfeef,
        .b = 0xff
    };
    // 寄存器修改相应字段
    UNION t1 = {
        .h = t0
    };
    printf("%d,%d,%d,%d,0x%x\n", t1.h.a, t1.h.b, t1.h.c, t1.h.d, t1.hh);
    t1.hh = 0xffffffff;
    printf("%d,%d,%d,%d,0x%x\n", t1.h.a, t1.h.b, t1.h.c, t1.h.d, t1.hh);
 
   
    return 0;
}
搜索更多相关主题的帖子: 数组 int char printf 指针 
2021-09-04 23:48
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:20 
字段这东西知道就可以,而且这东西太简单了,没必要花时间去练习。

熟练掌握位操作更好。

C语言没有真正意义上的多位数组,只有数组的数组,所以在内存上它们是连续的。

[此贴子已经被作者于2021-9-5 22:40编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2021-09-05 22:35
快速回复:二维数组、指针数组、数组指针、结构体位操作联合等,大家有兴趣的可以 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017714 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved