[英]Confused about the printing procedure of array of pointers to string
#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 };
那么如果使用如values[1]
,会得到什么? 您将获得数组中的第二个元素 。 打印此values
数组将像
printf("%d %d\n", values[0], values[1]);
你到目前为止和我在一起吗?
现在备份您的数组。 如果使用names[1]
,那么您会得到什么? 您仍然会获得数组中的第二个元素 。 第二个要素是什么? 它是char
的指针(即char *
)。 指向char
的指针可以用作什么? 一个字符串 。
printf
的"%s"
格式需要一个字符串,更具体地说是char *
。 这就是您提供的参数。
如果您使用像*names[1]
这样的取消引用运算符,则由于运算符优先级的原因,它等于*(names[1])
,等于*(names[1])
names[1][0]
。 换句话说,它为您提供了names[1]
指向的字符串中的第一个字符 。
names[0]
和names[1]
都是const char*
类型。
当您将%s
与const char*
参数一起使用时, printf
输出从参数开头开始的字符,直到达到\\0
。
如果您想要地址,请使用
printf("%p %p\n", (const void*)names[0], (const void*)names[1]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.