c - 问题与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
这是我不明白的部分,为什么我们不应该使用*B
呢B
?
谁能给我解释一下?
解决方案
在
*addXX
函数中,我们传入str1
了函数,这也是内存地址,因为它是一个数组名。然后我们把str1
内存地址存入指针中,但是我们在函数中使用的时候char*B
没有*
在前面加B。B
这是我不明白的部分,为什么我们不应该使用*B
呢B
?
在你使用B
两次的函数内部,
char *addXX(char *B) {
strcat(B,"XX");
return (B);
}
首先,在
strcat(B,"XX");
您使用B
而不是*B
因为strcat()
需要一个指针作为第一个参数。
第二次使用也是如此,
return (B);
您声明了*addXX
返回指向 char 的指针的函数,因此,您需要返回指针而不是取消引用它。
所以,你所有的推理都是好的。但是由于该函数需要一个指针,因此您不必取消引用它。
只是一个评论,
您正在做的是通过地址传递,这意味着您将变量的地址传递给函数*addXX
。按引用传递是另一回事,C 中没有按引用传递。
推荐阅读
- reactjs - 我使用 expo CLI 在 reactjs 中创建了我的第一个应用程序,并在尝试启动它时出现此错误
- python-3.x - 无法使用 pulumi 在 aws 上通过事件桥触发 lambda
- amazon-web-services - “aws cloudformation delete-stack”不能使用 SAM CLI 使用的 StackName?
- c - 使用 realloc 的问题(旧大小)
- sql - 如何在 sequelize 中使用 group by 与当前年份月份和另一个数据字段
- chainlink - 在 Chainlink Keepers 中为 performUpkeep() 编码字节数组
- linux-kernel - 如何使用自定义内核 5.10 (PREEMPT RT) 构建 raspbian
- flutter - 为什么我的数组中的数据没有被正确评估?
- ios - Swift - AVSpeechSynthesizer - 如何运行回调 onError
- sparql - Sparql 插入查询失败