用指针做形参和用数组做形参的区别
时间: 2023-05-27 12:02:27 浏览: 261
在C/C++语言中,用指针作为函数的形参和用数组作为函数的形参的区别主要有以下几点:
1. 用指针作为函数的形参时,指针可以指向一个变量,也可以指向数组,可以通过指针操作指向的内存地址。而用数组作为函数的形参时,数组名实际上是数组首元素的地址,因此传递的是整个数组的值,不能直接操作数组名所指向的内存地址。
2. 用数组作为函数的形参时,大小必须明确指定,不能修改大小。而用指针作为函数的形参时,可以根据需要修改指针指向的内存区域。
3. 用数组作为函数的形参时,数组本身会被复制,因此会占用额外的内存空间。而用指针作为函数的形参时,只是传递了指针所指向的地址,不会占用额外的内存空间。
4. 用数组作为函数的形参时,数组元素不可以为NULL。而用指针作为函数的形参时,指针可以为NULL,因此在使用指针时需要进行空指针判断。
5. 在函数内部修改指向数组的指针不会影响外部数组本身。而在函数内部修改指向指针的指针也可以修改外部数组本身。
相关问题
C一级数组指针形参和二级数组指针形参,如何使用?分别举例说明
在C语言中,一维数组和二维数组可以作为指针类型传递给函数。这里分别解释一下:
**一维数组指针形参:**
当你有一个一维数组,你可以将它的地址赋值给一个指向整型元素的指针。例如:
```c
void printArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int myArray[5] = {1, 2, 3, 4, 5};
printArray(myArray, sizeof(myArray) / sizeof(myArray[0])); // 传递数组首地址
return 0;
}
```
在这个例子中,`printArray`函数接受一个指向整数的一维数组指针和数组大小,然后打印出数组的所有元素。
**二维数组指针形参:**
二维数组实际上是一个指向一维数组的指针,所以也可以通过这种方式传递。例如:
```c
void printMatrix(int (*matrix)[3], int rows) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int myMatrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
printMatrix(myMatrix, 2); // 传递矩阵首行地址
return 0;
}
```
在这个例子中,`printMatrix`函数接收一个指向3x3整数数组的指针和行数,遍历并打印整个矩阵。
c语言要求用指针做形参,实现将二维数组(行列相同)的进行转置(行列数据互
要实现将二维数组进行转置,可以采用指针作为形参来处理。首先定义一个函数,函数的形参为指向二维数组的指针,即int**。
首先,我们需要确定原始二维数组的行数和列数。假设为n行n列,则要转置的结果就是n列n行的新数组。
然后我们可以使用两层循环来遍历原始数组,并将对应位置的元素交换。外层循环控制行数,内层循环控制列数。在每一次循环中,我们使用一个临时变量temp来保存原始数组中的某个元素,然后将其与转置后的位置元素进行交换。具体代码如下:
```c
void transpose(int** array, int n) {
int i, j;
int temp;
for(i=0; i<n; i++) {
for(j=i+1; j<n; j++) {
temp = array[i][j];
array[i][j] = array[j][i];
array[j][i] = temp;
}
}
}
```
以上代码中,我们使用了temp来保存原始数组中的元素,然后通过交换来实现转置操作。
最后,在主函数中创建一个二维数组,并进行转置操作。具体代码如下:
```c
int main() {
int n = 3; // 假设二维数组为3x3
int array[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 创建指向二维数组的指针
int** ptr = (int**)array;
// 调用函数进行转置
transpose(ptr, n);
// 打印转置后的二维数组
int i, j;
for(i=0; i<n; i++) {
for(j=0; j<n; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
return 0;
}
```
通过以上代码,就可以实现将二维数组进行转置,并输出转置后的结果。
阅读全文