C++:使用 memcpy 时,myArray 和 &myArray 有什么区别?
C++: When using memcpy, what is the difference between myArray and &myArray?
可能的重复项:
为什么数组的地址等于它在 C 中的值?
在这种情况下:
int x = 5;
unsigned char myArray[sizeof (int)];
这条线...
memcpy (&myArray , &x , sizeof (int));
。产生的结果与以下结果相同:
memcpy (myArray , &x , sizeof (int));
我是C++的新手,但我的印象是数组只是指向其数据的指针。 当 &myArray 与 myArray 的工作方式相同时,我感到震惊。 我本以为它会尝试复制到指针的地址,这将是非常糟糕的!
关于数组的两件事:
-
数组"衰减"到其元素类型的指针。这就是第二个版本正常工作的原因。看到这个:数组名称是指针吗?
-
有"指向数组的指针"这样的东西。它们很少使用,但看起来像这样:
int a[5];
int (*b)[5] = &a; // pointer to an array of 5 ints
在数组上使用时,&
运算符会为您提供指向数组类型的指针,这就是以下内容不起作用的原因:
int* b = &a; // error
由于memcpy
的参数是一个void*
,它接受任何指针类型,&myArray
和myArray
都有效。我建议使用myArray
,因为它更惯用。
你认为类型不同是正确的。 &myArray
是一个unsigned char(*)[]
(指向无符号字符数组的指针),myArray
(作为参数传递给函数时)成为类型 unsigned char*
(指向无符号字符的指针)。但是,请注意,即使类型不同,也有相同的地址值。两者都使用 memcpy 的原因是因为 memcpy
需要void*
并且不关心类型。
myArray 和 &myArray 有什么区别?
它们都指向 myArray 的第一个元素。
数组名称的计算结果通常为数组第一个元素的地址,因此 myArray 和 &myArray 具有相同的值。
memcpy 函数将内存地址作为输入参数。由于 myArray 和 &myArray 指向同一个地方,因此工作量是相同的:
void* memcpy( void* dest, const void* src, std::size_t count );
Parameters
dest - pointer to the memory location to copy to
src - pointer to the memory location to copy from
count - number of bytes to copy
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- c++库的公共头文件中应该包含什么
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- ifstream什么都没读
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 当我们在模板声明中看到类 C = myarray 时,这意味着什么?
- C++:使用 memcpy 时,myArray 和 &myArray 有什么区别?