# include <stdio.h>
void swap(int *x, int *y);
void main025()
{
int i, j;
i = 12;
j = 36;
printf("i and j before swapping: %d %d\n", i, j);
swap(&i, &j); /* 传递变量i和j的地址 */
printf("i and j after swapping: %d %d\n", i, j);
}
void swap(int *x, int *y)
{
int temp;
temp = *x; /* 存储变量x的值 */
*x = *y; /* 将y的值放入到x中 */
*y = temp; /* 将x的值放入到y中 */
}
对于上面的函数,
void swap(int *x, int *y)函数要求传入两个指针,也就是地址
调用的时候,在main函数里可以看到就真的是传址:swap(&i, &j);
但如果一个输入参数类型是字符指针的形式:char * c
比如:
HANDLE open(char * COMx);
open函数和swap函数输入参类型同样是指针,但调用的时候,却不能按照传址的方式调用,
比如有个字符数组作为参数传入到open: char str[10] = { 0 };
调用方式如果按传址就会报错,反向是按照传值方式转入:open(str);
该如何理解这种情况?
对于 char str[10] = { 0 };
str本身就是指针,指向数组的第一个元素。