C++数组名和数组拷贝详解

嵌入式技术

1368人已加入

描述

数组名

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;
}

这里注意,字符数组声明大小时,包括末尾的,因为初始化的字符个数不能超过 声明大小 - 1

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分