Screenshot of the program
在该程序中,用户以数字的形式输入年份的日期和月份 . 输出必须是字母 . 我无法改变变量 .
我没试过%s,认为这是一个字符串,但它不起作用 .
列表项我不明白为什么我们必须使用指针,如果月份名已经是一个数组?我以为它们是同一个东西,还是等同的?在此先感谢您的帮助 ! :)
使用 monthnames[month] 从类似的数组中获取字符串 .
monthnames[month]
你看,月份名是 char 的数组的数组(但我们将其表示为指针) . 由于我们在这里将指针视为数组,因此我们不需要取消引用它 .
char
如果您不打算更改它们,您也可能希望将您的事物声明为 const . 这是's not required, but it'的好习惯 .
const
我做了一个程序来测试这个,以防你不相信我:
#include <stdio.h> int main(void) { const char* monthnames[2] = { "Jan", "Feb" }; printf("%s\n", monthnames[0]); printf("%s\n", monthnames[1]); return 0; }
输出:
Jan Feb
您的变量monthnames是一个指向以null结尾的字符串的指针数组 . 这意味着 monthnames[month] 是一个指向以null结尾的字符串的指针,您可以使用%s打印该文件,而 *monthnames[month] 是该字符串中您可以使用%c打印的第一个字符 . *pointer 表示 pointer 指向的变量 .
*monthnames[month]
*pointer
pointer
在使用 month 索引数组之前检查用户输入可能也是个好主意 . 如果用户输入20个月或负月份的大月,您的程序可能会在没有这样的检查的情况下发生段错误 .
month
对于打印月份名称只需使用
printf("%s", monthnames[month]);
代替
printf("%c", *monthnames[month]);
后者只是在某个月打印出第一个字符 .
monthnames 是指向 char 的指针数组 . 因此,您可以使用该数组中的每个元素指向C字符串 - 就像代码中的情况一样 .
monthnames
注意:注意索引,在代码注释中,您建议4月是第4个月 . 然后十二月将是第12,但你的数组只能有最大索引11 .
3 回答
使用
monthnames[month]
从类似的数组中获取字符串 .你看,月份名是
char
的数组的数组(但我们将其表示为指针) . 由于我们在这里将指针视为数组,因此我们不需要取消引用它 .如果您不打算更改它们,您也可能希望将您的事物声明为
const
. 这是's not required, but it'的好习惯 .我做了一个程序来测试这个,以防你不相信我:
输出:
您的变量monthnames是一个指向以null结尾的字符串的指针数组 . 这意味着
monthnames[month]
是一个指向以null结尾的字符串的指针,您可以使用%s打印该文件,而*monthnames[month]
是该字符串中您可以使用%c打印的第一个字符 .*pointer
表示pointer
指向的变量 .在使用
month
索引数组之前检查用户输入可能也是个好主意 . 如果用户输入20个月或负月份的大月,您的程序可能会在没有这样的检查的情况下发生段错误 .对于打印月份名称只需使用
代替
后者只是在某个月打印出第一个字符 .
monthnames
是指向char
的指针数组 . 因此,您可以使用该数组中的每个元素指向C字符串 - 就像代码中的情况一样 .注意:注意索引,在代码注释中,您建议4月是第4个月 . 然后十二月将是第12,但你的数组只能有最大索引11 .