关于c语言函数传址的规定

牛黄解闷丸
  • 61
# 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);

该如何理解这种情况?

回复
阅读 349
1 个回答
✓ 已被采纳

对于 char str[10] = { 0 };
str本身就是指针,指向数组的第一个元素。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏