c语言出栈入栈函数为什么有时写指针型有时不写指针型
时间: 2023-12-14 08:34:25 浏览: 25
C语言中出栈入栈函数有时候需要写指针型,有时候不需要写指针型,这是因为函数参数传递的方式不同。在C语言中,函数参数传递的方式有两种:值传递和引用传递。对于值传递,函数会将参数的值复制一份,然后在函数内部使用这个副本,对副本的修改不会影响原来的参数。而对于引用传递,函数会将参数的地址传递给函数,函数内部使用这个地址来访问参数,对参数的修改会影响原来的参数。
当我们需要在函数内部修改参数的值时,就需要使用指针型参数,将参数的地址传递给函数,这样函数就可以通过指针来修改参数的值。而当我们只需要在函数内部读取参数的值时,就可以使用非指针型参数,将参数的值复制一份传递给函数,这样函数就可以直接使用这个副本来读取参数的值。
举个例子,如果我们需要在函数内部交换两个变量的值,就需要使用指针型参数:
```c
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 1, y = 2;
swap(&x, &y);
printf("x = %d, y = %d\n", x, y); // 输出:x = 2, y = 1
return 0;
}
```
而如果我们只需要在函数内部读取变量的值,就可以使用非指针型参数:
```c
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int x = 1, y = 2;
int z = max(x, y);
printf("z = %d\n", z); // 输出:z = 2
return 0;
}
```