百科问答小站 logo
百科问答小站 font logo



指针数组初始化为 nullptr 和直接使用 memcpy 有什么区别? 第1页

  

user avatar   pansz 网友的相关建议: 
      

首先,你说的应该是memset,我就当你是问memset了。

然后对于C++来说,因为C++作者在设计上规定了空指针必须是0,所以理论上你用memset全零是可以的。

如果是C的话,虽然实务中空指针确实都实现为0,但似乎语言设计上并未规定它必须是零。因此,理论上不能这么做,但实际上在已知的所有平台中都不会有问题。

所以对于题主的情况:理论上没有问题,但不建议你这么做,因为影响可读性,而且未必能提升性能。

不成熟的优化是万恶之源。高级优化是能够把这种连续赋值给优化好的,不需要自己去想memset这种提前优化的办法。


user avatar   peter-43-43-80 网友的相关建议: 
      

我直接惊了啊!提问者还有其他回答的三位老程序猿出奇一致地认为用 memcpy 没问题???!!!

看清楚啊!是 memcpy 啊!不是 memset 的啊!!!

你说一个人看走眼了也就罢了,怎么会发生四个人一起看走眼的情况呢?

       memcpy(parray, 0, size);      

这里从地址为 0 的地方开始拷贝元素,直接 crash 的啊!


那改成 memset 就没问题了吗?

       A **parray = new A *[size] memset(parray, 0, size);       

memset 的第三个参数是以 byte 数计的啊!

不是按数组元素个数计的!

得改成 size * sizeof(A*) 才行


所以你看看,老想着怎么优化,结果一不小心两个错误,把最重要的正确性指标都搞没了~




  

相关话题

  共用体只能同时储存一个值吗? 
  LeetCode上 C++ 官方题解为什么有很多没有写delete,不会内存泄漏么?面试时也可以么? 
  为什么栈相对于堆很小? 
  第2个孩子不是应该在第4个孩子之前完成任务吗? 
  C++ 几十年来为什么没给 break 语句加上参数? 
  C「带坏了」多少程序语言的设计? 
  如何修改shared_ptr智能指针,让他支持多线程? 
  C++ 中,如果指针换了被指向的东西,那被指向的原来的东西(是被 new 出来的)所占的内存会立刻被释放吗? 
  为什么 C++ 能够源码级兼容C语言? 
  C++ 中 new 和定位 new 的返回值都是 void*,却为什么可以被赋值给不同类型的指针? 

前一个讨论
原神如是宵宫来做引路人的话,剧情会如何走向?
下一个讨论
关于电影《雄狮少年》,到底有没有水军在洗地?





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利