gpt4 book ai didi

按值传递或引用传递之间的混淆

转载 作者:行者123 更新时间:2023-11-30 20:06:05 25 4
gpt4 key购买 nike

我在准备考试时尝试完成的问题如下:

:考虑具有以下原型(prototype)的函数:void Convert( char list[], char ch 1, char ch2);“convert”函数将“list”中找到的每个字符 chi 更改为字符 CH2。例如,函数调用“convert (name,'a','z')”将转换每个名为“name”的数组内的“a”到“z”。编写函数“convert”的定义。

我的程序运行到main中两个scanf函数的末尾,我正在研究如何在不使用指针的情况下传递参数。

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

char list[];
char ch1;
char ch2;

void convert(char list[], char ch1, char ch2);

int main()
{
char list[15];
char ch1, ch2;
printf("Enter a string of characters:");
scanf("%s", list);
printf("Enter the first letter:");
scanf("%c\n", &ch1);
printf("Enter the second letter:");
scanf("%c\n", &ch2);
}
void convert(char list[], char ch1, char ch2)
{
int wordcount;
int i = 0;
int x = 0;
int y = 0;
if (list[i] == ch1)
{
x++;
list[i] = ch2;

}
else if (list[i] != ch1)
{
y++;


}
else if (list[i] == NULL)
{
wordcount = (y + x + 1);

}

printf("In the string there are %d letters and in %s the letter %c was changed to %c, %d times.", wordcount , list, ch1, ch2, x);

}

最佳答案

严格来说,C 中不存在像 Fortran 中或 Pascal 中的 var 那样的“通过引用传递”。所有参数仅“按值”传递(有时也称为“按复制”)。

第一个参数声明在:

void convert(char list[], char ch1, char ch2) { .. }

有效地表示:

void convert(char *list, char ch1, char ch2) { .. }

其中list是函数的char *类型的局部指针变量。它与 main() 中声明的 list 数组没有任何共同点。换句话说,两者位于不同的范围内。我们所说的是数组list(来自main())“衰减”为指针,该指针保存其第一个元素的地址,然后该指针的值被分配给列表参数。

关于按值传递或引用传递之间的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27336436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com