为什么当我为字符串声明一个二维数组时,我需要使用'*'
char *month[12][10] = {"January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November",
"December"};
但是当我为整数声明它时,没有必要吗?
int numbers[2][3]={1,2,3,4,5,6};
C中的原因 "字符串"由指向其第一个字符的指针表示或处理。
或者反过来说——C 语言中没有字符串类型,只有指向字符的指针。按照惯例,许多库将指向字符的指针视为"字符串"的开头,以0x00
字节结尾或接受"字符串"长度作为参数,但没有字符串类型。
当我为整数声明它时,没有必要吗?
原因整数由它们自己表示,而不是由它们的第一个字节地址表示。当你使用"引号表示法中的事物"时,它有效地将指针指向其第一个字符,并且指向字符的指针在 C 中标记为char *ptr
。
当您看到:
char *str = "some string";
这意味着变量str
获取字符s
的地址。并且变量str
被声明为指向一个字符,所以它是char *
的。这只是一些库的约定,即使用字符的第一个字母来处理它开头的字符串。