[英]expected output and the practical output not matching, please explain the logic behind the code
#include<stdio.h>
int main()
{
char *str[] = {"Frogs","Do","Not","Die.","They","Croak"};
printf("%c %c %c",*str[0],*str[1],*str[2]);//expected F D N
printf("\n%u %u %u",str[0],str[1],str[2]);//expected 1000 1006 1003
}
此输出基于froak从1000开始的假设
输出如下
F D N
2162395060 2162395057 2162395053
怎么可能,在这里,地址从str[0]
到str[2]
减小,打印str[3]
, str[4]
和str[5]
,没有任何模式,而是突然改变了。地址
您正在打印三个字符串常量的地址。 编译器没有义务以任何可预测的方式组织字符串常量。
要求编译器提供一个指针数组。 可以顺序访问该数组以获得字符串常量的地址,但是可以将字符串常量存储在编译器认为有效或有用的任何位置。
我使用AppleClang 10.0.0.10001044在Mac OS上运行了相同的代码,并得到以下输出:
F D N
104431486 104431492 104431495
如您所见,使用AppleClang的指针是顺序的。
但是,这无关紧要。 您的代码中的任何内容都不应取决于编译器如何选择为字符串常量分配内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.