嗯,,,并没有如我所想,果然这样初始化还是不行,枚举也不例外。

好吧,这个测试没白做,给很久以前写过的代码找到了一个新的bug,,,

本来我一直以为使用枚举会全初始化成对应枚举的,然而事实如此残忍,准备好提变更吧。。。

那又来了新的问题了,我到底应该如何初始化呢?在使用枚举的情况下,试一下第二种方法:

我这样写:看起来没毛病哈,

typedef enum
    VALUE_0XAA = 0xaa
}VALUE;
int main(void)
    VALUE Array[10];
    memset(Array, VALUE_0XAA, sizeof (VALUE) * 10);
    return 0;

然而,,,什么情况?这是个啥子嘛?

难道是用这个sizeof枚举用的不对?

那换成UINT8试一下?

typedef enum
    VALUE_0XAA = 0xaa
}VALUE;
int main(void)
    VALUE Array[10];
    memset(Array, VALUE_0XAA, sizeof (UINT8) * 10);
    return 0;

这是啥子嘛,,,还是不对啊,,,开始崩溃,,,

那这个应该怎么玩,,,再试试这样,

typedef enum
    VALUE_0XAA = 0xaa
}VALUE;
int main(void)
   UINT8 Array[10];
    memset(Array, VALUE_0XAA, sizeof (UINT8) * 10);
    return 0;

终于回归正常了,这个故事告诉我不要随便使用枚举类型的数组,,,

故事还没结束 ,我们继续玩,这次不用UINT8类型了,我用两个字节的UINT16试一下:

int main(void)
   UINT16 Array[10];
    memset(Array, 0x01, sizeof (UINT16) * 10);
    return 0;

猜一下会怎么样:优秀,果然不出我所料,又是和我想的不一样了,

嗯,让老衲想想,257是什么鬼,,,

问了一下计算器,0x0101,优秀,破案了,memset操作的是1个字节吧?

就是因为memset操作的是1 个字节,导致这对这个数组赋值的时候每个字节都赋值成了0x01,才这样的。

天才如我,嘿嘿嘿。

那我就想把它初始化成0x01怎么办,这样加俩0再试试?

int main(void)
   UINT16 Array[10];
    memset(Array, 0x0001, sizeof (UINT16) * 10);
    return 0;

凉凉,没的用啊,还是0x0101哇,这可咋整,,,

难道是因为我memset粘多了?减少一下最后一个值试一下?

int main(void)
   UINT16 Array[10];
    memset(Array, 0x0001, 10);
    return 0;

我了个去,怎么这么难啊?又回到原点了,这样做相当于有一部分直接就没初始化啊。

凉凉,最后还是拿它没办法,只好用最笨的办法,先初始化成0,然后写个循环依次赋值了。

明天我再问问大佬有没有什么好办法吧。

关于数组可能所有人都很熟悉,但是这里我想说一下我对这个数组的使用过程中发现的问题:在函数内定义一个数组,不初始化,数组的值不确定 这个故事告诉我们在函数体内定义的变量都是在栈里的,如果不初始化那么它一定是前面使用过后的垃圾值。```int main(void){ UINT8 Array[10]; return 0;}```...
题外话:学习.NET已经有一年了,从C#->ASP.NET->WPF。主要以看电子书为主,比较少写代码。现在回头学习以前接触过的,随着知识与经验的的积累。 总是有各种惊喜,震惊!C#数组就是其中之一,我把它作为自己博客园的处女作。 C#数组与其它C系列语言有着很多的不同,以前接触的时候理解出现很大的偏差。尤其是对多维数组的认识。多维数组C语言相比是一个新概念。而最开始的 时候我把它当成交错数组的特殊类型。 首先重二维数组与简单的交错数组初始化与访问开始 代码如下: int[,] nums={ {1,2,3}, {1,2,0} }; for (int i = nums.GetLowerBo
参考书籍:《c++ primer》、《c++ standard Library》、《inside c++ object model》 c++的编程范式(不同的编程风格) 1、结构化编程,函数+数据,数据暴露在外,如果被一个函数修改,另一个函数可能不知道 2、面向对象编程,封装,开发维护容易,数据类型变了,程序员得重写函数 3、泛型编程,数据类型变了,编译器自动处理,模板 4、函数式编程,不受外界的额外影响,还可以接受其他函数作为输入、输出 ‘\n’和endl的区别:‘\n’只输出换行,缓冲区满了自动刷新,c
如果Qt中某类中有数组成员,对数组初始化必须放在构造函数而非类的声明中,同时类的声明中必须指定数组的大小。 class SerialPort : public QWidget     Q_OBJECT      const int speed_arr[]= {B115200,B57600,B38400,B19200,B9600,B4800,B2400,B180
在一些情况下,需要将float数组转换成uint8_t格式;因为某些函数的入口是uint8_t;如串口DMA发送函数:HAL_UART_Transmit_DMA 此方法会牺牲数据精度;使用请考虑精度要求。 //Float To Uint8 函数;使用round函数四舍五入,取整并存放发到char_array void FloatToUint8(uint8_t * char_array,float3...
1、认识数组 软件的基本功能是处理数据,而在处理数据时,必须先进行数据持有,将数据持有之后,再对数据进行处理。我们将程序中可以临时存储数据的部分叫做容器。 在java中,存储数据的容器效率最快的就是数组,也是java最基本的容器。 数组,顾名思义就
NASM提供了各种定义指令来为变量保留存储空间。 define assembler指令用于分配存储空间。 它可以用于保留以及初始化一个或多个字节。为初始化数据分配存储空间初始化数据的存储分配语句的语法为[variable-name] define-directive initial-value [,initial-value]... 其中,变量名是每个存储空间的标识符。 汇编器为数...