我是第一次接触C,在一个练习中,我必须编写以下代码部分的输出,即3。但我不明白为什么会这样。
int main() {
char st[100]="efgh";
printf ("\n%ld\n",&st[3]-st);
return 0;
}发布于 2019-06-16 06:05:13
在表达式中使用数组时,除非该数组是&或sizeof的参数,否则它的计算结果为其第一个元素的地址。
因此,&st[3] - st的计算结果是&st[3] - &st[0],这只是一个指针算法:两个数组元素的地址之间的差就是它们的索引之间的差,即3 - 0,它提供3。
唯一的问题是,结果的类型是ptrdiff_t,但是printf %ld需要一个long int。如果这些类型在您的机器上是不同的,它将无法工作。在printf()格式字符串中,ptrdiff_t的正确长度修饰符是t -使用"\n%td\n"。
发布于 2019-06-16 06:05:19
根据定义,&st[3]与st+3相同。st+3-st是3。(该表达式中的st从数组衰减到指针。(为了便于移植,从技术上讲,printf格式的字符串应该是%td而不是%ld。)
https://stackoverflow.com/questions/56614471
复制相似问题