首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印文件中st[3]-st的含义(“%ld”,&st[3]-st)

打印文件中st[3]-st的含义(“%ld”,&st[3]-st)
EN

Stack Overflow用户
提问于 2019-06-16 06:01:11
回答 2查看 94关注 0票数 1

我是第一次接触C,在一个练习中,我必须编写以下代码部分的输出,即3。但我不明白为什么会这样。

代码语言:javascript
复制
int main() {
    char st[100]="efgh"; 
    printf ("\n%ld\n",&st[3]-st); 
    return 0; 
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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"

票数 5
EN

Stack Overflow用户

发布于 2019-06-16 06:05:19

根据定义,&st[3]st+3相同。st+3-st3。(该表达式中的st从数组衰减到指针。(为了便于移植,从技术上讲,printf格式的字符串应该是%td而不是%ld。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56614471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档