数组与指针作为形参的区别
时间: 2023-09-02 10:10:10 浏览: 184
数组和指针作为形参的区别在于它们的传递方式和对形参的操作方式。
对于数组作为形参,它们通常以指针的形式传递,即传递数组的首地址。在函数内部,可以通过指针对数组进行操作,但是不能改变指针的值。如果在函数内部修改了数组元素的值,那么这个修改将会影响到调用函数时的原始数组。
对于指针作为形参,它们也是以指针的形式传递。在函数内部,可以通过指针修改指向的值,也可以修改指针的值。如果在函数内部修改了指针的值,那么这个修改将不会影响到调用函数时的原始指针。
需要注意的是,对于数组和指针作为形参,它们都是按值传递的,即函数接收到的是原始数组或指针的一个副本。因此,在函数内部对形参进行修改不会影响到原始数组或指针的值,除非使用指针或引用的方式传递。
相关问题
③输入一个4行3列的二维矩阵,编写一个函数用于显示此矩阵元素的值,要求实现使用二维数组和指针作为形参两种方法。
好的,以下是使用二维数组和指针作为形参两种方法的实现代码:
1. 使用二维数组作为形参:
```c++
#include <iostream>
using namespace std;
void displayMatrix(int matrix[][3], int rows) {
for(int i = 0; i < rows; i++) {
for(int j = 0; j < 3; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
int main() {
int myMatrix[4][3] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{10, 11, 12}};
displayMatrix(myMatrix, 4);
return 0;
}
```
2. 使用指针作为形参:
```c++
#include <iostream>
using namespace std;
void displayMatrix(int *matrix, int rows, int cols) {
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j++) {
cout << *(matrix + i*cols + j) << " ";
}
cout << endl;
}
}
int main() {
int myMatrix[4][3] = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{10, 11, 12}};
displayMatrix(&myMatrix[0][0], 4, 3);
return 0;
}
```
注意,这里使用了指针来代替二维数组作为形参,因为在 C++ 中,函数形参中的数组是以指针的形式传递的。在第二个示例中,我们将 `&myMatrix[0][0]` 作为参数传递给函数,这是一个指向矩阵中第一个元素的指针。在函数中,我们使用 `(matrix + i*cols + j)` 来访问矩阵中的元素,其中 `matrix` 是指向第一个元素的指针,`i` 和 `j` 分别是行和列的索引。
数组指针作为形参代码
当我们需要在函数中传递数组作为参数时,可以使用数组指针。数组指针是一个指向数组的指针变量,可以通过它来访问数组中的元素。下面是一个示例代码,演示了如何使用数组指针作为形参:
```
#include <stdio.h>
void print_array(int (*arr), int row) {
int i, j;
for (i = 0; i < row; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main() {
int arr = {{1, 2, 3}, {4, 5, 6}};
print_array(arr, 2);
return 0;
}
```
在上面的示例代码中,`print_array`函数的第一个参数是一个指向整型数组的指针,其中`row`表示数组的行数。在函数内部,我们可以通过双重循环遍历整个数组,并输出每个元素的值。
相关问题:
1. 什么是数组指针?
2. 数组指针和普通指针有什么区别?
3. 如何在函数中使用数组指针?
4. 数组指针作为形参有什么好处?
阅读全文