C++ | 数组拷贝
文章目录
- C++ | 数组拷贝
- 数组名
- 数组拷贝
- 1.对应位拷贝
- 2.地址位移赋值
- 3. memcpy内存拷贝
- 4.字符数组拷贝
- Reference
数组名
C++数组间赋值不能直接通过数组名称 randy = sesame
进行,因为数组名并不是指针,大部分情况下,编译器会隐式转换为指向数组首元素的指针常量。
如果使用 sizeof(数组名)
,就会得到数组所占内存大小(每个元素大小 * 元素个数)
如果对数组名取地址 &数组名
,表示数组的地址,其值与首元素地址相同。
具体看下图图示:
数组拷贝
1.对应位拷贝
#include <iostream>
void Print(int array[], int num) {
for (size_t i = 0; i < num; i++) {
std::cout << array[i] << " ";
}
std::cout << std::endl;
}
int main() {
int randy[5] = {2, 1, 3, 8, 7};
int sesame[5];
for (int i = 0; i < 5; i++) {
sesame[i] = randy[i];
}
Print(sesame, 5);
return 0;
}
2.地址位移赋值
int main() {
int randy[5] = {2, 1, 3, 8, 7};
int *pSesame = new int[5]; //指针变量
pSesame = randy;
for (int i = 0; i < 5; i++) {
std::cout << *(pSesame + i) << std::endl;
}
randy[4] = 33;
std::cout << "pSesame[4] " << *(pSesame + 4) << std::endl;
pSesame = nullptr;
return 0;
}
结果:
2
1
3
8
7
pSesame[4] 33
3. memcpy内存拷贝
int main() {
int randy[5] = {2, 1, 3, 8, 7};
int sesame[5];
memcpy(sesame, randy, sizeof(randy));
Print(sesame, 5);
int qcj[7];
memcpy(qcj, randy, sizeof(randy));
Print(qcj, 7);
return 0;
}
结果:
2 1 3 8 7
2 1 3 8 7 0 -1520381696
4.字符数组拷贝
int main() {
char randy[6]={"randy"}; // 初始化字符格式不能超过5
char sesame[6];
strcpy(sesame,randy);
std::cout << randy << std::endl;
return 0;
}
这里注意,字符数组声明大小时,包括末尾的\0
,因为初始化的字符个数不能超过 声明大小 - 1
Reference
- C++/C的数组名到底是什么?
- 数组之间不能直接赋值,为什么?赋值有四种方法
欢迎关注公众号【三戒纪元】