指针数组、数组指针、memset填充问题 |
您所在的位置:网站首页 › 给指针赋值地址的函数 › 指针数组、数组指针、memset填充问题 |
函数原型 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 |