C联接指向数组的指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C联接指向数组的指针相关的知识,希望对你有一定的参考价值。

我有一个无符号的16位整数数组:

static uint16_t dataArray[7];

数组的第7个元素的位代表某种状态。我希望以简单的方式获取和设置此状态的值,无需进行位移,并且无需在每次状态更改时将新值复制到数组。所以我创建了一个带有结构和指针的联合:

typedef struct {
        unsigned statusCode     : 4;
        unsigned errorCode      : 4;
        unsigned outputEnabled  : 1;
        unsigned currentClip    : 1;
        unsigned                : 6;
} SupplyStruct_t;

typedef union {
    SupplyStruct_t s;
    uint16_t value;
} SupplyStatus_t;

static SupplyStatus_t * status;

我的初始化例程希望状态指针指向数组的第7个元素,所以我尝试了:

status = &(dataArray[6]);

虽然这有效,但我收到一个警告:从不兼容的指针类型中分配

有一个更好的方法吗?我无法更改数组,但我可以自由更改结构,联合或指向数组的指针。

答案

警告说uint16_t *与SupplyStatus_t *不兼容。如果您想摆脱此警告,请将其转换为SupplyStatus_t *:

status = (SupplyStatus_t*)&(dataArray[6]);

我也会将union和struct放在一起:

typedef union
{
  struct
  {
    unsigned statusCode : 4;
    unsigned errorCode : 4;
    unsigned outputEnabled : 1;
    unsigned currentClip :1;
    unsigned unused : 6;
  } s;
  uint16_t value;
} SupplyStatus_t;
另一答案
  1. unsigned改为uint16_t

为什么? - 测试差异:https://ideone.com/uHLzpV

#include <stdio.h>
#include <stdint.h>

typedef struct {
        uint16_t statusCode     : 4;
        unsigned errorCode      : 4;
        unsigned outputEnabled  : 1;
        unsigned currentClip    : 1;
        unsigned                : 6;
} SupplyStruct_t;

typedef struct {
        uint16_t statusCode     : 4;
        uint16_t errorCode      : 4;
        uint16_t outputEnabled  : 1;
        uint16_t currentClip    : 1;
        uint16_t                : 6;
} SupplyStruct_t1;


typedef union {
    SupplyStruct_t s;
    uint16_t value;
} SupplyStatus_t;

typedef union {
    SupplyStruct_t1 s;
    uint16_t value;
} SupplyStatus_t1;

int main(void) {
    printf("%zu %zu
", sizeof(SupplyStatus_t), sizeof(SupplyStatus_t1));
    return 0;
}

最正确的方法是将表声明为结构表。

如果不 :

如果你想在位域上工作,你实际上不必声明指针。

static SupplyStatus_t status;
status.value = dataArray[6];

它几乎是便携和安全的方式

你也可以明确地投射它

以上是关于C联接指向数组的指针的主要内容,如果未能解决你的问题,请参考以下文章

梦开始的地方 —— C语言: 函数指针+函数指针数组+指向函数指针数组的指针

c语言如何输出指针所指向的ŀ

指向类实例c ++的指针数组

C ++从函数返回指向数组的指针的正确方法

如何在 Rust 中表示指向 C 数组的指针?

为啥在 C 中为数组声明和指向数组声明的指针动态分配的内存不同? [复制]