用指针做形参和用数组做形参的区别
时间: 2023-05-27 20:02:27 浏览: 283
在C/C++语言中,用指针作为函数的形参和用数组作为函数的形参的区别主要有以下几点:
1. 用指针作为函数的形参时,指针可以指向一个变量,也可以指向数组,可以通过指针操作指向的内存地址。而用数组作为函数的形参时,数组名实际上是数组首元素的地址,因此传递的是整个数组的值,不能直接操作数组名所指向的内存地址。
2. 用数组作为函数的形参时,大小必须明确指定,不能修改大小。而用指针作为函数的形参时,可以根据需要修改指针指向的内存区域。
3. 用数组作为函数的形参时,数组本身会被复制,因此会占用额外的内存空间。而用指针作为函数的形参时,只是传递了指针所指向的地址,不会占用额外的内存空间。
4. 用数组作为函数的形参时,数组元素不可以为NULL。而用指针作为函数的形参时,指针可以为NULL,因此在使用指针时需要进行空指针判断。
5. 在函数内部修改指向数组的指针不会影响外部数组本身。而在函数内部修改指向指针的指针也可以修改外部数组本身。
相关问题
用行指针做形参计算二维数组元素之和
在编程中,特别是处理二维数组的时候,可以使用行指针(row pointer)作为形参来计算元素之和。行指针是一个指向数组首元素的指针,然后通过递增指针按照数组的行来遍历。假设我们有一个二维数组`arr`,我们可以创建一个函数`sumRowPointer(arr, rows, cols)`,参数如下:
1. `arr`: 二维数组本身。
2. `rows`: 行数。
3. `cols`: 列数。
```cpp
int sumRowPointer(int arr[][cols], int rows, int cols) {
int total = 0;
int *rowPtr = arr; // 初始化行指针
for (int i = 0; i < rows; ++i) {
total += *rowPtr; // 将当前行的第一个元素加到总和中
rowPtr++; // 指针移动到下一行的开始
}
return total;
}
```
在这个例子中,我们首先将行指针设置为数组的第一行,然后逐行累加元素值直到所有行都遍历完。这种方法简单直接,适用于所有固定列数的二维数组。
函数的形参用指针和数组名的区别
函数的形参可以用指针或者数组名,它们的区别在于:
1. 指针作为函数的形参,需要在函数内部显式地进行解引用操作,才能访问指针所指向的变量。而数组名作为函数的形参,在函数内部可以直接访问数组元素,无需进行解引用操作。
2. 当数组名作为函数的形参时,数组的大小信息会丢失,函数内部无法得知数组的实际大小。而当指针作为函数的形参时,可以通过传递数组的长度信息,来确保函数内部不会访问到数组之外的内存空间。
3. 如果在函数内部修改指针的值,那么函数外部的指针值不会被改变。而如果在函数内部修改数组名所指向的数组元素的值,那么函数外部的数组元素的值也会被改变。
需要注意的是,数组名作为函数形参时,其实是将数组的首地址传递给函数,因此在函数内部对数组名进行加减操作,其实是对数组的首地址进行加减操作。
阅读全文
相关推荐















