Rob*_*len 2 c arrays string function
void printInstructions();
char *getUserWord();
int main()
{
printInstructions();
char *baseWord = getUserWord();
printf("%s", baseWord);
return 0;
}
void printInstructions()
{
printf(" Instructions: \n"
"===================================================================\n"
"= This program is a hangman game. =\n"
"= The first user will enter the name to be guessed =\n"
"= After that, the second user will guess the letters of the word =\n"
"= the second user will loose if they have three strikes =\n"
"===================================================================\n");
return;
}
char *getUserWord()
{
static char str[20];
scanf("%s", str);
return str;
}
Run Code Online (Sandbox Code Playgroud)
我的函数getUserWord
通过传递一个字符串来完成它的任务.从我在线阅读的内容char *baseWord = getUserWord();
是将字符串分配给main函数中变量的唯一方法.我不知道为什么这有效,我甚至不确定这在记忆中是做什么的.以下是对我有意义的事情.为什么这不起作用?
char baseWord[21];
baseWord = getUserWord();
Run Code Online (Sandbox Code Playgroud)
你已经陷入了相信指针和数组是同一个东西的陷阱.他们不是.
按照C中的约定,字符串通常表示为一个数组char
,并'\0'
在末尾附加一个附加的终结符(所谓的空字符).所以文字串"AB"
被表示为3的阵列char
与值'A'
,'B'
和'\0'
.
指针与数组完全不同,因为字符串是使用数组表示的char
,所以指针和字符串是完全不同的东西.指针是包含内存中地址的变量.
事情变得混乱的是,在许多上下文中,数组的名称被转换为指针.例如;
char x[] = "AB";
char *p = x;
Run Code Online (Sandbox Code Playgroud)
此赋值有效,但这并不意味着数组是指针,或指针是数组.而是将名称x
转换为指向其第一个字符的指针.所以初始化在功能上等同于
char *p = &x[0];
Run Code Online (Sandbox Code Playgroud)
所以p
指向'A'
字符串中具有值的字符"AB"
.
你的代码也发生了同样的事情,所以
char *getUserWord()
{
static char str[20];
scanf("%s", str);
return str;
}
Run Code Online (Sandbox Code Playgroud)
相当于
char *getUserWord()
{
static char str[20];
scanf("%s", &str[0]);
return &str[0];
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,返回的指针getUserWord()
都有一个值,该值是地址str[0]
.这是用于初始化值baseWord
的main()
char *baseWord = getUserWord();
Run Code Online (Sandbox Code Playgroud)
因为baseWord
现在指向数组的第一个字符,所以它可以被视为AS,如果它是一个数组.在C中,对于给定值i
,这包括baseWord[i]
(in main()
)和str[i]
(in getUserWord()
)之间的等价.使用数组语法这一事实并不意味着指针和数组是同一个东西.它只是意味着他们可以使用相同的语法.
然而,要实现的重要一点是,可以从函数返回指针(并且返回的值分配给或用于初始化另一个指针),但数组不能.所以,main()
这是合法的;
char *p = getUserWord();
p[0] = 'X'; /* will change str[0] in getUserWord() */
Run Code Online (Sandbox Code Playgroud)
但这不会是;
char array[20] = getUserWord();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
132 次 |
最近记录: |