IT评测·应用市场-qidao123.com

标题: C++中数组作为函数参数传递,和使用指针作为函数参数有什么区别? [打印本页]

作者: 惊落一身雪    时间: 2025-3-13 03:16
标题: C++中数组作为函数参数传递,和使用指针作为函数参数有什么区别?
在C++里,数组作为函数参数传递和使用指针作为函数参数在很多方面体现出相似性,但也存在一些明显区别,下面从多个维度睁开具体分析。
1. 语法形式


  1. void function(int arr[], int size);
复制代码
这里的arr看似是数组,不过实际上它会被编译器当作指针来处置处罚。size用于明白数组的元素数目,因为函数内部无法直接获取数组的巨细。

  1. void function(int* ptr, int size);
复制代码
ptr是一个指向int范例的指针,size同样是用来指明所指向数组的元素数目。
2. 本质


  1. #include <iostream>
  2. void modifyArray(int arr[], int size) {
  3.     for (int i = 0; i < size; ++i) {
  4.         arr[i] *= 2;
  5.     }
  6. }
  7. int main() {
  8.     int myArray[3] = {1, 2, 3};
  9.     modifyArray(myArray, 3);
  10.     for (int i = 0; i < 3; ++i) {
  11.         std::cout << myArray[i] << " ";
  12.     }
  13.     return 0;
  14. }
复制代码
在上述代码中,modifyArray函数对arr的操作会直接影响到main函数里的myArray,这表明传递的是数组首元素的地址。

  1. #include <iostream>
  2. void modifyValue(int* ptr) {
  3.     *ptr = 10;
  4. }
  5. int main() {
  6.     int num = 5;
  7.     modifyValue(&num);
  8.     std::cout << num << std::endl;
  9.     return 0;
  10. }
复制代码
此代码中,modifyValue函数接收一个指向int范例的指针,通过解引用操作修改了指针所指向变量的值。
3. 数组巨细信息


  1. #include <iostream>
  2. void printArray(int arr[], int size) {
  3.     for (int i = 0; i < size; ++i) {
  4.         std::cout << arr[i] << " ";
  5.     }
  6.     std::cout << std::endl;
  7. }
  8. int main() {
  9.     int myArray[3] = {1, 2, 3};
  10.     printArray(myArray, 3);
  11.     return 0;
  12. }
复制代码

  1. #include <iostream>
  2. void printArray(int* ptr, int size) {
  3.     for (int i = 0; i < size; ++i) {
  4.         std::cout << ptr[i] << " ";
  5.     }
  6.     std::cout << std::endl;
  7. }
  8. int main() {
  9.     int myArray[3] = {1, 2, 3};
  10.     printArray(myArray, 3);
  11.     return 0;
  12. }
复制代码
4. 多维数组处置处罚


  1. #include <iostream>
  2. void print2DArray(int arr[][3], int rows) {
  3.     for (int i = 0; i < rows; ++i) {
  4.         for (int j = 0; j < 3; ++j) {
  5.             std::cout << arr[i][j] << " ";
  6.         }
  7.         std::cout << std::endl;
  8.     }
  9. }
  10. int main() {
  11.     int my2DArray[2][3] = {{1, 2, 3}, {4, 5, 6}};
  12.     print2DArray(my2DArray, 2);
  13.     return 0;
  14. }
复制代码

  1. #include <iostream>
  2. void print2DArray(int** ptr, int rows, int cols) {
  3.     for (int i = 0; i < rows; ++i) {
  4.         for (int j = 0; j < cols; ++j) {
  5.             std::cout << ptr[i][j] << " ";
  6.         }
  7.         std::cout << std::endl;
  8.     }
  9. }
  10. int main() {
  11.     int** my2DArray = new int*[2];
  12.     for (int i = 0; i < 2; ++i) {
  13.         my2DArray[i] = new int[3];
  14.         for (int j = 0; j < 3; ++j) {
  15.             my2DArray[i][j] = i * 3 + j + 1;
  16.         }
  17.     }
  18.     print2DArray(my2DArray, 2, 3);
  19.     for (int i = 0; i < 2; ++i) {
  20.         delete[] my2DArray[i];
  21.     }
  22.     delete[] my2DArray;
  23.     return 0;
  24. }
复制代码
5. 可读性和语义


综上所述,数组作为函数参数传递和使用指针作为函数参数本质上很相似,不过在语法形式、多维数组处置处罚以及代码可读性等方面存在一些差别。在实际编程中,必要根据具体的需求和场景来选择合适的方式。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4