printf(“%ld”,&st [3] -st)中&st [3] -st的含义

时间:2019-06-15 22:01:10

标签: c

我是C语言的新手,在练习中,我必须编写以下代码部分的输出,即3。但是我不明白为什么会这样。

int main() {
    char st[100]="efgh"; 
    printf ("\n%ld\n",&st[3]-st); 
    return 0; 
}

2 个答案:

答案 0 :(得分:5)

在表达式中使用数组时,除非它是&sizeof的参数,否则它将求值为第一个元素的地址。

因此,&st[3] - st的计算结果为&st[3] - &st[0],这仅仅是指针运算:两个数组元素的地址之间的差就是它们的索引之间的差,即3 - 0,它得出{ {1}}。

唯一的问题是结果的类型为3,但是ptrdiff_t printf需要%ld。如果您的计算机上的这些类型不同,则无法使用。在printf()格式的字符串中,long int的正确长度修饰符是ptrdiff_t-使用t

答案 1 :(得分:3)

根据定义,import org.apache.spark.sql.expressions.Window val win =Window.orderBy("date_differnece") val df= Seq(("FT1" ,"17-06-2019"), ("FT2" ,"19-06-2019"), ("FT3" ,"23-06-2019"),( "FT4", "25-06-2019"),("FT5", "27-06-2019")).toDF("flight", "dt") val df1= df.withColumn("date_differnece", abs(datediff(current_date,to_date($"dt", "dd-MM-yyyy")))) df1.select($"*", min($"date_differnece").over(win).as("nearest_flight")).where($"nearest_flight"===$"date_differnece").select($"dt") +----------+ | dt| +----------+ |17-06-2019| +----------+ &st[3]相同。 st+3st+3-st。 (该表达式中的3从数组衰减为指针。为便于携带,从技术上说,printf格式字符串应具有st而不是%td。)