#include<stdio.h>
int main(){
char *names[2] = {"Lord", "Voldemort"};
printf("%s %s\n",names[0], names[1]);
return 0;
}
为什么上面的代码可以工作?我的意思是,它应该打印其各自索引中包含的字符串的地址,并且我们应该使用 *names[0] 和 *names[1]。但为什么它能起作用呢?
最佳答案
如果你有一个像这样的整数数组
int values[2] = { 1, 2 };
那么如果使用例如,你会得到什么? 值[1]
?您将获得数组中的第二个元素。打印此 values
数组的方式如下:
printf("%d %d\n", values[0], values[1]);
到目前为止你已经和我在一起了吗?
现在恢复你的阵列。如果你使用 names[1]
你会得到什么?您仍然获得数组中的第二个元素。第二个元素是什么?它是一个指向 char
的指针(即 char *
)。指向 char
的指针可以用作什么?一个字符串。
带有 printf
的 "%s"
格式需要一个字符串,更具体地说是一个 char *
。这正是您作为参数给出的内容。
如果您使用像 *names[1]
这样的解引用运算符,那么感谢 operator precedence它等于*(names[1])
,而*(names[1])
又等于names[1][0]
。换句话说,它为您提供 names[1]
指向的字符串中的第一个字符。
关于对字符串指针数组的打印过程感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45503776/