指针数组、数组指针、memset填充问题

您所在的位置:网站首页 给指针赋值地址的函数 指针数组、数组指针、memset填充问题

指针数组、数组指针、memset填充问题

2024-07-12 01:15| 来源: 网络整理| 查看: 265

函数原型

memset(dist , val,size);

char test[64];

memset(test, 0,sizeof(test))、或者memset(test,'A',sizeof(test))没有任何问题,可以完成数组的正确填充。

同比:

int test[64];

memset(test,0,sizeof(test))应该能够将test 数组的每个元素填充为0,经验证,同样可以;

memset(test,1,sizeof(test)),理论上能够test数组的每个元素填充为1,事实是,test数组中出现的是:0x01010101(十六进制)。

为什么填充失败了?

反过头来看memset函数说明,memset是采用将val逐字节填充到dist中去。

当数组为char类型时,sizeof(char)==1,没有问题;

数组为int类型时,sizeof(int)==4,memset 会将数组元素的四个字节均填充为val,对应数值1,就是00000001000000010000000100000001,当转化成二进制时,就不可能是1了。

所以,使用memset填充数组时,需要牢记其是逐个字节填充。

发现memset的这个问题是源于对指针数组和数组指针的理解,两者在c++可谓是相当强大,易于混淆,偶尔捡起来回顾一下,甚好!

鉴于网上诸多关于指针数组、数组指针的用法介绍,我就不再献丑赘述,仅贴上例子,简单明了(其实,网上资源稂莠不齐,错误的讲解很多,关键还需要靠自己验证,才能明白个中道理)

int _tmain(int argc, _TCHAR* argv[]) { //指针数组 int *p[N]; memset(p,NULL,sizeof(p)); for (int i=0;i



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3