我试图在考试准备中完成的问题如下:
:考虑使用此原型的函数: void convert(char list [],char ch 1,char ch2); “转换”功能将它在“列表”中找到的每个字符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);
}
答案 0 :(得分:3)
严格来说,在Fortran中没有“通过引用传递”,或者在Pascal中没有var
。所有参数都只是“按值”传递(有时它也称为“按副本”)。
第一个参数声明:
void convert(char list[], char ch1, char ch2) { .. }
有效地表示:
void convert(char *list, char ch1, char ch2) { .. }
其中list
是函数的char *
类型的本地指针变量。它与list
中声明的main()
数组没有任何共同之处。换句话说,两者都位于不同的范围内。我们所说的是数组list
(从main()
)“衰减”到指针,它保存第一个元素的地址,然后将这个指针的值赋值给list
参数。
答案 1 :(得分:0)
ch1和ch2已经是全局的,因此您无需传递任何内容进行转换。像这样:
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 char list[15];
5 char ch1;
6 char ch2;
7
8 void convert();
9
10 int main()
11 {
12 scanf("%c\n",&ch1);
13 scanf("%c",&ch2);
14 printf("char 1: %c, char2: %c\n",ch1,ch2);
15 convert();
16 printf("char 1: %c, char2: %c\n",ch1,ch2);
17 return 0;
18 }
19
20 void convert()
21 {
22 char temp;
23 temp=ch1;
24 ch1=ch2;
25 ch2=temp;
26 }