首页 > 解决方案 > 问题与C中的引用传递有关

问题描述

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *addXX(char *B);

int main(void) {
  char str1[25], *str2;
  gets(str1);
  str2=addXX(str1);
  puts(str2);
  exit(0);
}
char *addXX(char *B) {
  strcat(B,"XX");
  return (B);
}

这是我从课堂上得到的注释,它显示了引用调用在 C 中的工作原理。但是,有一件事我不明白。在*addXX函数中,我们传入str1了函数,这也是内存地址,因为它是一个数组名。然后我们把str1内存地址存入指针中,但是我们在函数中使用的时候char*B没有*在前面加B。B这是我不明白的部分,为什么我们不应该使用*BB

谁能给我解释一下?

标签: carrayspointers

解决方案


*addXX函数中,我们传入str1了函数,这也是内存地址,因为它是一个数组名。然后我们把str1内存地址存入指针中,但是我们在函数中使用的时候char*B没有*在前面加B。B这是我不明白的部分,为什么我们不应该使用*BB

在你使用B两次的函数内部,

char *addXX(char *B) {
  strcat(B,"XX");
  return (B);
}

首先,在

strcat(B,"XX");

您使用B而不是*B因为strcat()需要一个指针作为第一个参数。

第二次使用也是如此,

return (B);

您声明了*addXX返回指向 char 的指针的函数,因此,您需要返回指针而不是取消引用它。

所以,你所有的推理都是好的。但是由于该函数需要一个指针,因此您不必取消引用它。

只是一个评论,

您正在做的是通过地址传递,这意味着您将变量的地址传递给函数*addXX。按引用传递是另一回事,C 中没有按引用传递。


推荐阅读