如何定义等效于16字节数组的类型?C语言typedef报错解决
正确定义等效于16字节数组的类型
哦,这个问题我之前折腾过好一阵!你写的typedef uint8_t[16] mynewType;不符合C语言里typedef的语法规则,所以编译器才会抛出那些让人摸不着头脑的错误。
问题出在哪?
C语言中typedef的语法逻辑是:先写原有的类型描述,再写你想要定义的新类型名。对于数组类型来说,你需要把数组的维度[16]和新类型名绑定在一起,而不是放在原类型后面。
正确的写法
把数组维度移到新类型名之后就搞定了:
#include <stdint.h> // 别忘了包含这个头文件,uint8_t是在这里定义的 typedef uint8_t mynewType[16];
怎么使用这个新类型?
定义好之后,你就可以像用普通类型一样使用它:
声明一个16字节的数组变量:
mynewType my_data;这完全等效于
uint8_t my_data[16];初始化数组:
mynewType my_data = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};作为函数参数使用(注意:数组参数会退化为指针,但typedef的写法依然有效):
void print_array(mynewType arr) { for (int i = 0; i < 16; i++) { printf("%02X ", arr[i]); } }
额外小技巧
如果需要定义只读的16字节数组类型,可以加上const修饰:
typedef const uint8_t mynewConstType[16];
这样用mynewConstType声明的数组就无法被修改,适合存储固定的常量数据。
内容的提问来源于stack exchange,提问作者mans
相关产品推荐
相关产品推荐

